动态SQL-删除列

动态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].[

我有个问题,希望有人能帮我。@sqlMain中的动态sql集目前正在抓取一个名为lg.ColorGroup的列,但是当我删除该列时,我实际上不想抓取该列,尽管我无法按ColorGroup进行排序。是否有一种方法可以使ColorGroup返回的结果集在未选中的情况下按顺序排列。谢谢

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”(我相信您的意思),它对我很有效。非常感谢!