为什么在 "CONCAT_NULL_YIELDS_NULL" 设置为 ON 时检查 temp table 是否存在不起作用?
Why does checking if temp table exists when "CONCAT_NULL_YIELDS_NULL" is set to ON doesn't work?
SET CONCAT_NULL_YIELDS_NULL OFF;
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
为什么如果我将set CONCAT_NULL_YIELDS_NULL
设置为off,如上所示,并且temp table ##QueryResults
存在,它会成功删除,但如果我将其设置为ON,那么temp table 即使存在也不会被丢弃?
这在 SQL Server 2014 SP1
上按预期工作
SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF;
CREATE TABLE ##QueryResults (foo int);
SELECT OBJECT_ID ('tempdb..##QueryResults');
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
SELECT OBJECT_ID ('tempdb..##QueryResults');
GO
SET CONCAT_NULL_YIELDS_NULL ON;
CREATE TABLE ##QueryResults (foo int);
SELECT OBJECT_ID ('tempdb..##QueryResults');
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
SELECT OBJECT_ID ('tempdb..##QueryResults');
给予
-----------
373576369
-----------
NULL
-----------
389576426
-----------
NULL
SET CONCAT_NULL_YIELDS_NULL OFF;
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
为什么如果我将set CONCAT_NULL_YIELDS_NULL
设置为off,如上所示,并且temp table ##QueryResults
存在,它会成功删除,但如果我将其设置为ON,那么temp table 即使存在也不会被丢弃?
这在 SQL Server 2014 SP1
上按预期工作SET NOCOUNT ON;
SET CONCAT_NULL_YIELDS_NULL OFF;
CREATE TABLE ##QueryResults (foo int);
SELECT OBJECT_ID ('tempdb..##QueryResults');
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
SELECT OBJECT_ID ('tempdb..##QueryResults');
GO
SET CONCAT_NULL_YIELDS_NULL ON;
CREATE TABLE ##QueryResults (foo int);
SELECT OBJECT_ID ('tempdb..##QueryResults');
IF OBJECT_ID ('tempdb..##QueryResults') IS NOT NULL
DROP TABLE ##QueryResults;
SELECT OBJECT_ID ('tempdb..##QueryResults');
给予
-----------
373576369
-----------
NULL
-----------
389576426
-----------
NULL