sql-server - 将字符串附加到存储过程中的列值 - 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,
但我不能在存储过程中使用相同的语法,或者不能使用声明的变量。我也没有在网上找到任何解决方案。
任何建议表示赞赏。
解决方案
你需要给它一个数据类型......比如varchar
. 将其更改为:
Declare @Newstring varchar(64) = 'sample';
并确保 64 足够大以容纳您传入的任何内容。如果没有,请使用更大的东西。此外,NVARCHAR
如果您要传入 unicode,您可能需要。
此外,您还缺少动态字符串的结尾引号,以及END
andBEGIN
需要添加引号以使值成为文字。
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
推荐阅读
- c++ - 快速排序;分段错误,但找不到哪里?
- python - Python中的Beautiful Soup没有给我页面上正确数量的链接
- amazon-cloudformation - 验证 aws 云形成时出错
- reactjs - 如何在反应中为可重用组件应用不同的背景颜色和不同的边框颜色?
- python - 用最少的代码实现 numbers.Real
- javascript - 在 div 中拖放列表元素
- mysql - MYSQL:每个用户的组计数特定列?
- list - 使用linq在c#中排序列表
- php - Centos7 php安装过程中设置php.ini路径的问题
- javascript - 如何更改antd的触发