我正在尝试使用SSMS(在Windows操作系统上)和BSQLDB(在RHL Linux上)对SQL 2012 SERVER运行相同的脚本。这两个客户的输出是不同的。
该脚本涉及与空值连接。这是脚本的简化版本
Method Not Allowed (POST): /login/
[21/Apr/2017 14:31:12] "POST /login/ HTTP/1.1" 405 0
,输出如下 - SSMS
--File: Test.SQL
declare @FirstValue varchar(50)
declare @SecondValue varchar(50)
set @FirstValue = null
set @SecondValue = 'TEST'
select @FirstValue + ' - Hello - ' + @SecondValue as Result
BSQLDB:
Result
-------------------------
NULL
(1 row(s) affected)
如何为这两个客户获得一致的结果。
答案 0 :(得分:0)
在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
答案 1 :(得分:0)
连接的默认SQL行为是当任何值为NULL时,整个连接结果为NULL。但是,在从Linux(BSQLDB)发出的查询中没有观察到这种情况。
我们必须在SQL上设置SET CONCAT_NULL_YIELDS_NULL ON
连接参数,以便从所有客户端获得一致的输出。
注意:您也可以使用SSMS从UI设置相同的参数,
右键单击对象资源管理器上的服务器>属性>选择连接>设置'默认连接选项'
希望这可以帮助任何面临类似问题的人。
感谢。