在我的SQL Server 2012环境中,我已经创建了一系列存储过程,它们之间传递预先存在的临时表(我尝试了不同的架构,但由于需求/程序的性质无法绕过这个问题)。
我想要做的是,在存储过程内部检查是否已经创建了一个临时表,如果没有,则创建它。
我的当前SQL代码如下:
我想要做的是,在存储过程内部检查是否已经创建了一个临时表,如果没有,则创建它。
我的当前SQL代码如下:
IF OBJECT_ID('tempdb..#MyTable') IS NULL
CREATE TABLE #MyTable
(
Col1 INT,
Col2 VARCHAR(10)
...
);
但是,当我尝试在表已经存在时运行它时,我会得到以下错误信息:
数据库中已经存在一个名为“#MyTable”的对象
因此,它似乎不会简单地忽略 If 语句中的那些行。
有没有办法完成这个目标 - 如果临时表不存在,则创建它;否则,使用内存中已经存在的表?
谢谢!
更新:
出于某种原因,按照@RaduGheorghiu在评论中的建议,我发现系统创建了一个名称类似于 dbo.#MyTable________________________________________________0000000001B1
的临时表。
那是我找不到它的原因吗?有没有办法改变它?这对我来说是新的....
create table #MyTable (col1 int);
然后多次运行了IF OBJECT_ID('tempdb..#MyTable') IS NULL CREATE TABLE #MyTable ( Col1 INT );
但是我没有收到任何错误信息。 - Radu GheorghiuGO
语句,然后一切都正常了...请将此作为答案发布,它修复了问题,这似乎是SQL Server的一个错误。 - John Bustos