我正在尝试创建一个正常的sql查询,动态调用某个表中的列。我已经阅读了一些关于如何使用INFORMATION_SCHEMA.COLUMNS
获取列列表的论坛,但我想从INFORMATION_SCHEMA.COLUMNS from my table
中选择列。
例如:
SELECT (SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_') FROM OPOR
但它只返回列名。不是我表中此列的值。所以我的问题是,是否可以从INFORMATION_SCHEMA.COLUMNS
返回值并从我的表中选择它?我的示例列是U_NewColumn
。所以结果应该是:SELECT U_NewColumn FROM OPOR
答案 0 :(得分:5)
INFORMATION_SCHEMA.COLUMNS
非常有用,您可以根据自己的过滤器获取表/列的列表。在你的情况下。你想要做的是创建一个动态sql,你想要获取从U_
你会做这样的事情。
DECLARE @Variable NVARCHAR(200) = 'SELECT '
SELECT TOP 1 @Variable = @Variable + QUOTENAME(COLUMN_NAME,']') + ' FROM ' + QUOTENAME(TABLE_NAME,']')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_'
EXEC sp_executeSQL @Variable
如果你想要多个列,你可以这样做
DECLARE @TableName NVARCHAR(100) = 'OPOR'
DECLARE @Variable NVARCHAR(200)
SELECT @Variable = 'SELECT ' + STUFF((
SELECT', ' + QUOTENAME(COLUMN_NAME,']')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND LEFT(COLUMN_NAME, 2) = 'U_'
FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'') + ' FROM ' + @TableName
PRINT @Variable
EXEC sp_executeSQL @Variable