Sql server 2008 在IF子句中创建临时表
在存储过程中:Sql server 2008 在IF子句中创建临时表,sql-server-2008,tsql,Sql Server 2008,Tsql,在存储过程中: IF (condition1) SELECT * INTO #temp FROM table1 WHERE name = 'Dave' ELSE SELECT * INTO #temp FROM table1 WHERE name = 'Greg' 创建存储过程时,它表示数据库中已经有一个名为“temp”的对象。它一定认为我创建了相同的临时表两次 有什么好办法吗 我知道我可以插入temp。。。。, 但是有很多字段,我不想重新键入它们。您尝试过: I
IF (condition1)
SELECT * INTO #temp FROM table1 WHERE name = 'Dave'
ELSE
SELECT * INTO #temp FROM table1 WHERE name = 'Greg'
创建存储过程时,它表示数据库中已经有一个名为“temp”的对象。它一定认为我创建了相同的临时表两次
有什么好办法吗
我知道我可以插入temp。。。。,
但是有很多字段,我不想重新键入它们。您尝试过:
If (condition1)
INSERT INTO #temp
SELECT * FROM table1 where name = 'Dave'
ELSE
INSERT INTO #temp
SELECT * FROM table1 where name = 'Greg'
试试这个:
SELECT * INTO #temp FROM table1 WHERE 1 = 0
IF (condition1)
INSERT INTO #temp SELECT * FROM table1 WHERE name = 'Dave'
ELSE
INSERT INTO #temp SELECT * FROM table1 WHERE name = 'Greg'
select into将不会返回任何行,但它将使临时表具有正确的列。如果这很愚蠢,请不要-1
只要让我知道,我会删除
我不知道你的条件的性质
为什么不呢
SELECT * INTO #temp
FROM table1
WHERE ( condition1 and name = 'Dave')
OR (!condition1 and name = 'Greg')
确保数据库中没有名为temp.的表。。或者在select语句之前使用drop table。错误发生在编译时。它甚至不会创建大爆炸。它认为我创建了两次temp。我相信如果您在select语句之前执行检查,例如if temp not exist,它将不会被中断。这将为您提供无效的对象名称“temp”。必须先创建临时表。但我不想,因为它有很多领域,我不认为这是愚蠢的。事实上,这可能是最好的解决方案。不幸的是,它在现实世界中可能不起作用。看起来示例代码是为了回答问题而虚构的示例。实际上,条件可能要复杂得多,或者本例中的源表table1对于每个条件可能都不相同。@GMastros但如果我刚才要求澄清条件1,OP可能不理解问题。可以这样做。但是,至少在我的情况下,它会对性能产生明显的影响。最后我只是先创建一个临时表,然后再执行INSERT INTO。您是否多次评估复杂的条件1?试着对它求值一次,然后将它分配给一个变量并引用该变量。这样就行了。但它会造成第一次选择的开销。另外,我会从表1中选择TOP 0*INTO temp