动态SQL-删除列
我有个问题,希望有人能帮我。@sqlMain中的动态sql集目前正在抓取一个名为lg.ColorGroup的列,但是当我删除该列时,我实际上不想抓取该列,尽管我无法按ColorGroup进行排序。是否有一种方法可以使ColorGroup返回的结果集在未选中的情况下按顺序排列。谢谢动态SQL-删除列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有个问题,希望有人能帮我。@sqlMain中的动态sql集目前正在抓取一个名为lg.ColorGroup的列,但是当我删除该列时,我实际上不想抓取该列,尽管我无法按ColorGroup进行排序。是否有一种方法可以使ColorGroup返回的结果集在未选中的情况下按顺序排列。谢谢 INSERT INTO #ServerList SELECT DISTINCT ServerURL, ServerName, InstanceType FROM [CR_PIT_01].[
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
谢谢从外部选择列表中删除ColorGroup,并按顺序保留它 排序时不必选择列
这只是意味着您必须指定外部选择列表,而不是使用
select*
从外部选择列表中删除ColorGroup,并按顺序保留它
排序时不必选择列
这只是意味着您必须指定外部选择列表,而不是使用
select*
select PIV.Name FROM(…)ORDER BY colorgroup,PIV.Name
是一个有效的SQL。select PIV.Name FROM(…)ORDER BY colorgroup,PIV.Name
是有效的SQL。将第一个select子句中动态SQL中的星号更改为不包含COLORGOUP的显式列表
SET @sqlMain = 'SELECT * FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM
变成
SET @sqlMain = 'SELECT Name, '+ @FilterValue +' , ServerName FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM ...
将动态sql中第一个select子句中的星号更改为不包含COLORGOUP的显式列表
SET @sqlMain = 'SELECT * FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM
变成
SET @sqlMain = 'SELECT Name, '+ @FilterValue +' , ServerName FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM ...
我不确定您的
INSERT…SELECT
中的ORDER BY
是否真的有用。您不一定保证以相同的顺序将它们取回,而且看起来您正在JOIN
ing加入临时表。订单没有意义,因此可以取消此步骤。我不确定您的INSERT…SELECT
中的Order BY
是否真的有用。您不一定保证以相同的顺序将它们取回,而且看起来您正在JOIN
ing加入临时表。顺序没有意义,所以这一步可以省略。谢谢你的回答帮助我得出了答案。我删除了您指定的颜色组,并插入了名称和“@ProgramList”(我相信您的意思),它对我很有效。非常感谢!谢谢你的回答帮助我得到了答案。我删除了您指定的颜色组,并插入了名称和“@ProgramList”(我相信您的意思),它对我很有效。非常感谢!