一尘不染

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

sql

我需要做这样的事情,但是它总是会因“将数据类型varchar转换为int时出错”而失败:

DECLARE @intParam INT
DECLARE @ColName VARCHAR(64)

SET @ColName='intcolumn'

SET @intParam = SELECT @ColName FROM myTable

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


阅读 175

收藏
2021-03-17

共1个答案

一尘不染

您需要使用动态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

2021-03-17