动态选择语句

时间:2014-07-03 17:39:16

标签: tsql sql-server-2008-r2

我们在数据库中有一个表,该表有一个名为'fieldName'的列。在fieldName中是另一个表中列的名称。基本上,这是用户可以向表单添加问题的UI的一部分,当发生这种情况时,我们将该信息存储在fieldName中,然后创建一个自定义表,其列名将与一个字段名称匹配。

我想要做的是生成一个动态SQL语句来获取所有fieldNames并将其构建到SQL语句中。到目前为止,我有这个:

DECLARE @CFTable INT
DECLARE @columnNames VARCHAR(8000) 

SET @CFTable = 693


SELECT @columnNames = COALESCE(@columnNames + ', ', '') + CONVERT(VARCHAR(25),fieldName )
FROM [FSM_CustomFormColumn]
WHERE CustomFormID = @CFTable

print @columnNames

以上结果是列名,如下所示:

HearAboutEvent, ParticipatedBefore, WeatherDependent, NonRefundable, TransferFee

因此,如果我将所有这些列名存储在@columnNames变量中,那么我想做这样的事情:

select @columnNames from table

这就是我不知道如何工作并需要帮助。

2 个答案:

答案 0 :(得分:1)

DECLARE @SQL NVARCHAR(MAX);

SET @SQL = N'SELECT ' + @ColumnNames + N' FROM TABLE;'

EXEC(@SQL);
  • 在原始SQL中,将@ColumnNames更改为NVARCHAR(MAX)。在内部,所有对象名称等都具有SYSNAME类型,等同于NVARCHAR(128)。
  • 您也不应该使用CONVERT(VARCHAR(25), fieldName),只需使用fieldName

答案 1 :(得分:0)

你必须使用动态sql来做到这一点。假设MSSQL,你的动态sql将是:

`声明@sql varchar(200),@ column varchar(1)='*'

从<>'

设置@sql ='select'+ @columns +'

EXEC(@sql)`

外卖:您可以使用exec(...)函数

执行字符串作为sql