将列名称插入到单独的表中的存储过程SELECT语句中

时间:2015-08-13 13:06:00

标签: sql sql-server sql-server-2008

我试图找出将Table1中保存的列名插入到针对Table2运行的SELECT语句中的最佳方法。此查询在存储过程中运行。这并没有很好地解释,所以我可以说我在表1中有这些值:

enter image description here

我想要做的是在针对Table2的SELECT语句中使用这些列名:

Select -- Column Names
from Table2
where UserId = 3;

我不确定是否可以以这种方式使用输入参数或如何将值传递给它。例如:

Select @ColumnNames
from Table2
where UserId = 3;

或者可能加入表2?

谢谢!

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