我试图找出将Table1中保存的列名插入到针对Table2运行的SELECT语句中的最佳方法。此查询在存储过程中运行。这并没有很好地解释,所以我可以说我在表1中有这些值:
我想要做的是在针对Table2的SELECT语句中使用这些列名:
Select -- Column Names
from Table2
where UserId = 3;
我不确定是否可以以这种方式使用输入参数或如何将值传递给它。例如:
Select @ColumnNames
from Table2
where UserId = 3;
或者可能加入表2?
谢谢!
答案 0 :(得分:3)
您必须使用动态SQL
declare @columns varchar(1000)
declare @sql varchar(8000)
select @columns='', @sql=''
select @columns=@columns+value+',' from table1
set @columns=left(@columns,len(@columns)-1)
set @sql='select '+@columns+' from table2'
exec(@sql)
但要注意SQL注入并阅读www.sommarskog.se/dynamic_sql.html
答案 1 :(得分:0)
您可以查询系统表以获取列,即(取出WHERE子句以查看所有表和列)
SELECT tab.name AS TableName,
col.name AS ColName,
tp.name AS SType,
col.max_length,
col.[precision],
(CASE col.is_nullable
WHEN 1 THEN 'true'
WHEN 0 THEN 'false'
ELSE 'unknown'
END) AS Is_Nullable
FROM sys.tables as tab
LEFT OUTER JOIN sys.columns AS col
ON tab.object_id = col.object_id
LEFT OUTER JOIN sys.types AS tp
ON col.system_type_id = tp.system_type_id
WHERE tab.name = 'Table1'
ORDER BY tab.name,col.name