CONCAT_NULL_YIELDS_NULL SQL是持久运行时设置吗? (Server 2000及以上版本)

时间:2010-02-16 08:12:11

标签: sql-server

好的,我知道在未来的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

2 个答案:

答案 0 :(得分:1)

正如BOL所说,

  

如果在存储中设置了SET语句   过程,SET选项的值   在返回控制后恢复   来自存储过程。

因此,开发人员几乎没有什么可以确保正确的设置。他们可以在SP的开头设置它们,之后甚至不必恢复原始值。

答案 1 :(得分:1)

可以设置CONCAT_NULL_YIELDS_NULL:

  • 每个连接 - 当您关闭连接并打开新连接时,它将恢复为默认状态

  • 每个数据库

    • 打开Microsoft SQL Server Management Studio,右键单击数据库并选择属性。它位于杂项部分。
  • 或来自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来测试该版本。