【问题标题】:Set declared parameter value and CONCAT column name设置声明的参数值和 CONCAT 列名
【发布时间】:2019-12-12 18:07:00
【问题描述】:

我有一个包含 Char1、Char2、Char3 列的表.....这些列中的每一个都包含一些值。我声明了变量 @i 并在 while 循环中尝试将其连接到 Char 表列名。 另外,我在查询中声明了参数@current,然后我尝试在查询中设置它的值。

set @tmp = cast(@i as varchar(2))
select @current = 'Char' + @tmp
from SerialNumberFormat
where Example = 'XXXXXXXXXX'

当我执行查询时,@current 的值是 Char1、Char2、Char3...等,而不是列的值。 如何在@current 中设置列​​值而不是列名?

【问题讨论】:

  • 你需要使用动态SQL。但是您可能会思考为什么表格中有这样的列。数据最好用一列和单独的行表示值。
  • @GordonLinoff 你是对的,但是表已经创建并且里面有很多数据。这不是很好的解决方案,但我必须处理它,因为我无法更改它
  • 我不能说我真的理解你的目标。一些示例数据和预期结果会有所帮助。
  • @Larnu 我编辑了这篇文章。希望现在更清楚了
  • 选择@current = Concat(Char1, Char2, Char3)

标签: sql sql-server database


【解决方案1】:
select @current = Concat(Char1, Char2, Char3)
from SerialNumberFormat
where Example = 'X59AA419010045'

【讨论】:

  • 仅代码的答案很少有帮助。请详细说明您的代码并解释为什么以及如何解决问题。
【解决方案2】:

我找到并为我工作的解决方案正在执行sp_executesql stored procedure

set @SQL = N'select @currentOUT = Char' + @tmp + ' from SerialNumberFormat
where Example = ''XXXXXXXXX'''
SET @ParmDefinition = N'@currentOUT nvarchar(10) OUTPUT' 
exec sp_executesql @SQL, @ParmDefinition, @currentOUT = @current OUTPUT
select @current

【讨论】:

    【解决方案3】:

    这样的动态 Sql 可能对你有用

    Declare @i int = 5
    
    Declare @tmp varChar (10) = @i
    
    Declare @Sql nVarChar(Max) =    'select Char' + @tmp + '
    from SerialNumberFormat
    where Example = ''X59AA419010045'''
    
    exec sp_executesql @Sql
    

    【讨论】:

    • 您使用 sp_executesql 的方法对我来说是正确的。我使用 sp_executedsql 解决了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2010-12-10
    • 2014-02-19
    相关资源
    最近更新 更多