如何解决如何使用SQL Server 2005基于SQL语句集创建视图?
| 我写了一些SQL语句,最后给出了一个表。我想将整个语句集创建为\“ View \”。我怎么得到的? 声明如下:------------ Creating TempTable(#MasterTable) ----------------------
CREATE TABLE #MasterTable
(ItemID INT,ItemName VARCHAR(100),Specifications VARCHAR(100),D1 VARCHAR(50),D2 VARCHAR(50),D3 VARCHAR(50),D1_Code VARCHAR(50),D2_Code VARCHAR(50),D3_Code VARCHAR(50))
------------ Creating TempTable(#TempItems) ----------------------
CREATE TABLE #TempItems(ItemID INT,D3_Code VARCHAR(50))
------------ Creating & Inserting TempTable(@Dim) ----------------------
DECLARE @Dim TABLE (DCodes VARCHAR(100))
INSERT INTO @Dim SELECT D1_Code FROM MAS_SizeType WHERE D1_Code <> \'\'
INSERT INTO @Dim SELECT D2_Code FROM MAS_SizeType WHERE D2_Code <> \'\'
INSERT INTO @Dim SELECT D3_Code FROM MAS_SizeType WHERE D3_Code <> \'\'
------------ Inserting data into TempTable(#MasterTable) ----------------------
INSERT INTO #MasterTable
SELECT STR_Item.ItemID,STR_Item.ItemName,STR_Item_Specifications.SpecificationName,STR_Item.D1,STR_Item.D2,STR_Item.D3,MAS_SizeType.D1_Code,MAS_SizeType.D2_Code,MAS_SizeType.D3_Code
FROM STR_Item INNER JOIN
MAS_SizeType ON STR_Item.SizeTypeID = MAS_SizeType.SizeTypeID INNER JOIN
STR_Item_Specifications ON STR_Item.SpecificationID = STR_Item_Specifications.SpecificationID
-------------------- Inserting Data into #TempItems Table ----------------------------
INSERT INTO #TempItems
SELECT
*
FROM #MasterTable
------------------Cursor for All dimensions details into single row for each items ----------------------
DECLARE @DCode VARCHAR(MAX),@Cnt INT
SET @Cnt = 0
DECLARE ColAdd CURSOR FOR
SELECT DISTINCT DCodes FROM @Dim
OPEN ColAdd
FETCH NEXT FROM ColAdd INTO @DCode
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @Cnt = 1
EXECUTE (\'ALTER TABLE #TempItems ADD \' + @DCode + \' VARCHAR(50)\')
EXECUTE(\'UPDATE #TempItems SET [\' + @DCode + \'] = M.D1
FROM #MasterTable M
INNER JOIN #TempItems T ON T.ItemID = M.ItemID AND M.D1_Code = \'\'\' + @DCode + \'\'\'\')
EXECUTE(\'UPDATE #TempItems SET [\' + @DCode + \'] = M.D2
FROM #MasterTable M
INNER JOIN #TempItems T ON T.ItemID = M.ItemID AND M.D2_Code = \'\'\' + @DCode + \'\'\'\')
EXECUTE(\'UPDATE #TempItems SET [\' + @DCode + \'] = M.D3
FROM #MasterTable M
INNER JOIN #TempItems T ON T.ItemID = M.ItemID AND M.D3_Code = \'\'\' + @DCode + \'\'\'\')
FETCH NEXT FROM ColAdd INTO @DCode
END
CLOSE ColAdd
DEALLOCATE ColAdd
IF (@Cnt = 1)
BEGIN
SELECT @DCode = STUFF(( SELECT DISTINCT \'],[\' + ltrim(DCodes)
FROM @Dim
ORDER BY \'],[\' + ltrim(DCodes)
FOR XML PATH(\'\')
),1,2,\'\') + \']\'
EXECUTE (\'SELECT ItemID,ItemName,Specifications,\' + @DCode + \' FROM #TempItems ORDER BY ItemName\')
END
DROP TABLE #TempItems
DROP TABLE #MasterTable
解决方法
这是一个存储过程:不是视图。视图是单个SELECT(可能带有CTE和UNION)
如果您需要从中进行选择,建议您尝试使用多语句表值函数。但是,存在一些限制可能会阻止这种情况。 YMMV。性能也很棒
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。