从SSMS和BSQLDB运行时,SQL脚本返回不同的值

时间:2017-04-21 02:32:31

标签: sql linux null ssms

我正在尝试使用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)

如何为这两个客户获得一致的结果。

2 个答案:

答案 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设置相同的参数,

右键单击对象资源管理器上的服务器>属性>选择连接>设置'默认连接选项'

希望这可以帮助任何面临类似问题的人。

感谢。