首页 > 解决方案 > 将字符串附加到存储过程中的列值 - SQL Server

问题描述

我正在尝试将字符串附加到存储过程中的列值之一。

这是我的语法

DECLARE @Newstring VARCHAR(MAX) = 'sample';
....

IF cond1
BEGIN
    SET @query = 'select 
                      e.id, c.address,
                      case when a.lastname is null then a.firstname
                           else a.lastname + ' + @Newstring + '
                      end name,
                      .........'

我收到一个错误

列名“样本”无效

如果我将其作为查询执行,则以下连接有效

select 
    e.id, c.address,
    case 
       when a.lastname is null then a.firstname
       else a.lastname + 'sample'
   end name,

但我不能在存储过程中使用相同的语法,或者不能使用声明的变量。我也没有在网上找到任何解决方案。

任何建议表示赞赏。

标签: sql-serverstored-procedures

解决方案


你需要给它一个数据类型......比如varchar. 将其更改为:

Declare @Newstring varchar(64) = 'sample';

并确保 64 足够大以容纳您传入的任何内容。如果没有,请使用更大的东西。此外,NVARCHAR如果您要传入 unicode,您可能需要。

此外,您还缺少动态字符串的结尾引号,以及ENDandBEGIN需要添加引号以使值成为文字。

Declare @Newstring varchar(20) = 'sample'
declare @query varchar(max)
IF 1=1
    BEGIN
      set @query = '
           select e.id, c.address,
                  case when a.lastname is null then a.firstname
                       else a.lastname + ''' + @Newstring + '''  --added quotes to make the string a literal during execution
                  end name' ---quote added here

     END   --added END here


print @query

推荐阅读