相关疑难解决方法(0)

多次 CREATE 和 DROP #SomeTable 是否“合法”?

我已经将我的代码分类为“连贯块”,我可以一遍又一遍地将其插入到更长的“配置脚本”中,我正在使用的模式之一是:

CREATE TABLE #WidgetSetting 
(
    WidgetID bigint not null,
    Name nvarchar(100) not null,
    Value nvarchar(max) not null,
    CreateDate datetime not null
)

INSERT VALUES

MERGE TABLES

DROP TABLE #WidgetSetting
Run Code Online (Sandbox Code Playgroud)

但是现在 SSMS 抱怨该对象在下次CREATE TABLE火灾时已经存在。是什么赋予了?

我认为很明显我将不得不在脚本的开头声明一次表,截断而不是删除,但很自然地,无法删除表并再次使用相同的名称。

sql-server ssms t-sql sql-server-2008-r2

8
推荐指数
1
解决办法
469
查看次数

这段 TSQL 是如何工作的?

为什么下面的批次不能按预期工作?

DROP TABLE IF EXISTS #test1;

IF 1 = 1
    SELECT *
    INTO #test1
    FROM sys.databases
    WHERE database_id <= 5;

ELSE
    SELECT *
    INTO #test1
    FROM sys.databases;


SELECT *
FROM #test1;
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

消息 2714,级别 16,状态 1,第 12 行 数据库中已有一个名为“#test1”的对象。

我必须像这样更改代码:

DROP TABLE IF EXISTS ##test1;

IF 1 = 1
    EXEC ('
    SELECT *
    INTO ##test1
    FROM sys.databases
    WHERE database_id <= 5;
    '    );

ELSE
    EXEC ('
    SELECT *
    INTO ##test1
    FROM sys.databases;');


SELECT *
FROM ##test1;
Run Code Online (Sandbox Code Playgroud)

这按预期工作。上述错误似乎是一个解析错误,我不确定。谁能帮忙解释一下这里发生了什么?

sql-server t-sql errors

7
推荐指数
1
解决办法
743
查看次数

标签 统计

sql-server ×2

t-sql ×2

errors ×1

sql-server-2008-r2 ×1

ssms ×1