Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在IF子句中创建临时表_Sql Server 2008_Tsql - Fatal编程技术网

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