我正在尝试使用SSMS(在Windows OS上(和BSQLDB(在RHL Linux上(对SQL 2012服务器运行相同的脚本。这两个客户的输出都是不同的。
该脚本涉及与零值的串联。这是脚本的简化版本
--File: Test.SQL
declare @FirstValue varchar(50)
declare @SecondValue varchar(50)
set @FirstValue = null
set @SecondValue = 'TEST'
select @FirstValue + ' - Hello - ' + @SecondValue as Result
,输出如下 - SSM
Result
-------------------------
NULL
(1 row(s) affected)
bsqldb:
- Hello - TEST
我如何为这两个客户获得一致的结果。
串联的默认SQL行为是当任何值中的任何一个值为null时,整个串联导致null。但是,这在从Linux(BSQLDB(发射的查询中没有观察到。
我们必须在SQL上设置SET CONCAT_NULL_YIELDS_NULL ON
连接参数以具有所有客户端的一致输出。
注意:您也可以使用SSM从UI设置相同的参数,
右键单击"对象资源管理器">"属性"上的服务器>选择连接>设置"默认连接选项"
希望这有助于任何面临类似问题的人。
谢谢。
在sql-server中,与null连接的任何值是null
您可以在sql-server中使用的是使用isnull函数
declare @FirstValue varchar(50)
declare @SecondValue varchar(50)
set @FirstValue = null
set @SecondValue = 'TEST'
select isnull(@FirstValue,'') + ' - Hello - ' + isnull(@SecondValue,'') as Result