我正在修改一个旧的SQL查询代码,但无法弄清楚新版本无法正常工作的原因。以下是最简单的代码版本。
- 旧版
declare @query as varchar(10)
set @query = null
print 'test1'
exec('print ''a'''+@query+';print ''b''')
- 新版本
declare @query as varchar(10)
declare @text varchar(20)
set @text = null
set @query = 'print ''a'''+@text+';print ''b'''
print 'test2'
exec (@query)
结果
test1
a
b
test2
使用字符串+ null运行exec会自动忽略null。这是设计还是记录在某处?或者这是一个错误?我肯定错过了什么。有人可以解释一下吗?
任何人都可以发布mysql结果吗?感谢。
答案 0 :(得分:1)
documentation说明语法:
Execute a character string
{ EXEC | EXECUTE }
( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
[ AS { USER } = ' name ' ]
[;]
所以,我的猜测是表达式+
中的'print ''a'''+@query+';print ''b'''
没有被解释为字符串连接,而只是作为exec
命令语法的一部分。
这可以解释为什么行为不同;虽然不是它是一个错误还是一个功能。
将上述内容与print
的文档进行对比:
PRINT msg_str | @local_variable | string_expr
...
string_expr
是一个返回字符串的表达式。可以包含连接的文字值,函数和变量。有关更多信息,请参阅表达式(Transact-SQL)。
请注意,print
仅引用"字符串表达式",其中exec
定义了自己的语法。