在SELECT语句中将列名指定为参数?

Sco*_*tis 0 sql sql-server-2008

我需要做这样的事情,但总是失败'错误将数据类型varchar转换为int':

DECLARE @intParam INT
DECLARE @ColName VARCHAR(64)

SET @ColName='intcolumn'

SET @intParam = SELECT @ColName FROM myTable
Run Code Online (Sandbox Code Playgroud)

我如何完成这样的事情?我可以看到问题是SELECT语句只是将列名作为字符串返回,但我不知道如何解决这个问题.我正在使用SQL Server 2008R2.

Fil*_*vić 6

你需要使用动态sql:

  • 构建动态SQL查询(请参阅下面的示例中的@SQL变量)
  • 使用输出参数从动态sql中获取值(请参阅下面的示例中的@intParam和@intParam_out)
  • 使用sp_executesql执行动态sql
DECLARE @intParam INT
DECLARE @ColName VARCHAR(64)

SET @ColName='intcolumn'

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT @intParam_out = ' + @ColName + ' FROM myTable'
exec sp_executesql @SQL, N'@intParam_out int OUTPUT', @intParam_out = @intParam OUTPUT
Run Code Online (Sandbox Code Playgroud)