有一個問題,並希望有人能幫助我。在@sqlMain中設置的動態sql目前正在抓取一個名爲lg.ColorGroup的列,但實際上我不想抓取該列,但當我刪除它時,雖然我無法執行ORDER BY ColorGroup。有沒有辦法讓結果集返回由ColorGroup排序,而不選擇它。謝謝!動態SQL - 刪除列
INSERT INTO #ServerList
SELECT DISTINCT ServerURL, ServerName, InstanceType
FROM [CR_PIT_01].[dbo].[EFDM_Servers]
WHERE InstanceType = 'Production'
SELECT @ProgramList = STUFF((SELECT ',' + QUOTENAME(ServerName) FROM #ServerList ORDER BY ServerURL FOR XML PATH (''), type).value('.', 'nvarchar(max)'), 1, 1, '')
PRINT @ProgramList
CREATE Table #ServerListGrouped
(
Name varchar(300),
ColorGroup int
)
INSERT INTO #ServerListGrouped
SELECT DISTINCT Name, (case when SUBSTRING(LOWER(Name), 0, 3) = 'y_' then 2 when SUBSTRING(Lower(Name), 0, 3) = 'z_' then 3 when Exists (Select BuiltInField FROM [CR_PIT_01].[dbo].[EFDM_BuiltInFields] WHERE BuiltInField = Name) then 4 else 1 end) As FieldUsage
FROM CR_PIT_01.dbo.EFDM_ProjectFields
ORDER BY FieldUsage ASC, Name
SET @sqlMain = 'SELECT * FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM [CR_PIT_01].[dbo].[EFDM_ProjectFields] AS P JOIN #ServerList AS S ON S.ServerURL = P.ServerURL Join #ServerListGrouped LG on p.Name = lg.Name) AS P PIVOT (MIN(' + @FilterValue + ') FOR ServerName IN (' + @ProgramList + ')) AS PIV Where Name LIKE (''%' + @Name + '%'') ORDER BY colorgroup, PIV.Name'
--SET @sqlMain = 'SELECT * FROM (SELECT P.Name, P.'+ @FilterValue +' , S.ServerName FROM [CR_PIT_01].[dbo].[EFDM_ProjectFields] AS P JOIN #ServerList AS S ON S.ServerURL = P.ServerURL) AS P PIVOT (MIN(' + @FilterValue + ') FOR ServerName IN (' + @ProgramList + ')) AS PIV Where Name LIKE (''%' + @Name + '%'') ORDER BY PIV.Name;'
PRINT @sqlMain;
--EXEC sp_executesql @sqlMain;
DROP TABLE #ServerList
DROP TABLE #ServerListGrouped
謝謝
我不知道的是,'ORDER BY'在'INSERT ... SELECT'實際上做任何有用的東西。你不一定保證以相同的順序返回它們,它看起來就像你正在加入那個臨時表。訂單沒有意義,所以這一步可以消除。 – Shawn