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

时间:2011-11-18 00:52:32

标签: sql sql-server-2008

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

DECLARE @intParam INT
DECLARE @ColName VARCHAR(64)

SET @ColName='intcolumn'

SET @intParam = SELECT @ColName FROM myTable

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-2)

使用Cast

SET @intParam = SELECT cast(@ColName as int) FROM myTable