好的,我知道在未来的SQL版本中,CONCAT_NULL_YIELDS_NULL将始终设置为ON(插入MSDN搜索参数(yadda,yadda)),请耐心等待。
无聊的细节:该平台是MSSQL 2000 Enterprise(v8 sp4)AKA Critatious Period Edition。
以下将评估为NULL
SELECT 'abc' + NULL;
可以理解的。但你可以通过以下方式来解决这个问题:
SET CONCAT_NULL_YIELDS_NULL OFF;
SELECT 'abc' + NULL;
在这种情况下,结果是“abc”。从这里开始,未来的sql语句将允许与NULL连接。但这是一个“持久的”运行时设置吗?例如,此设置仅适用于我与SQL服务器的会话,还是适用于所有用户执行的语句?
据我所知,在将_YIELDS_NULL设置为ON后,重新启动MSSQL服务会将其默认设置为OFF(如果我错了,请更正我)。
最后一件事:我实际上并没有计划将其付诸实践。第三方存储过程失败(看起来他们可能已更新它,打破它)。我能想到的最好的是他们在假设“SET CONCAT_NULL_YIELDS_NULL”设置为 ON 的情况下实现了它。过去常常有用。
我只是在找一个原因:有没有办法在SQL服务器启动时将CONCAT_NULL_YIELDS_NULL设置为 ON ?
答案 0 :(得分:1)
正如BOL所说,
如果在存储中设置了SET语句 过程,SET选项的值 在返回控制后恢复 来自存储过程。
因此,开发人员几乎没有什么可以确保正确的设置。他们可以在SP的开头设置它们,之后甚至不必恢复原始值。
答案 1 :(得分:1)
可以设置CONCAT_NULL_YIELDS_NULL:
每个连接 - 当您关闭连接并打开新连接时,它将恢复为默认状态
每个数据库
或来自T-SQL
ALTER DATABASE database_name SET {CONCAT_NULL_YIELDS_NULL OFF}
注意:某些客户端在打开连接时可以在命令上发出set concat_null_yields_null。例如,SQL Server Management Studio连接到SQL 2005。 使用SQL Server Profiller查找您的连接。
我的笔记本上没有SQL 2000来测试该版本。