背景:有一个存储过程用给定名称的临时表执行“填充”操作。该过程是通用的,因为它检查临时表的模式,然后根据模式执行不同的“内容”。我明白,这有点奇怪,但我不愿意改变它,因为它在大多数情况下都可以正常工作,除了....为什么SQL Server在没有时认为临时表已经存在?
如果我有一个存储过程,它为临时表创建两个不同的模式同名。从逻辑上讲,它仅根据IF的哪个分支创建一个临时表。问题是,当存储过程由SQL Server检查看起来它正在评估IF两侧
所以这个SQL失败(这是有道理的,如果它检查SQL语法):
IF (1=1)
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL
)
END
ELSE
BEGIN
CREATE TABLE #test
(
a BIGINT NOT NULL,
b BIGINT NOT NULL,
c BIGINT NOT NULL
)
END
--exec SomeProcedureWhichDoesStuffWith#Test
DROP TABLE #test
,出现以下错误:
Msg 2714, Level 16, State 1, Line 14
There is already an object named '#test' in the database.
的IFS内跌幅榜的任何组合(之前或之后创建表DDL)似乎满足SQL检查。
任何想法,我可以做到这一点?例如,我可以告诉SQL不执行语法检查,只是接受sproc原样?
是感谢您的信息。不幸的是,它是在一个存储过程中创建表,所以它必须在同一批次中(所以它不是GO)。 – 2011-01-28 13:20:05