sql - 在 IF .. ELSE 语句中使用临时表

标签 sql sql-server sql-server-2005 tsql

为什么 SQL Server 坚持认为临时表已经存在!其中之一将会发生! ,所以永远不会出现这种情况。

declare @checkvar  varchar(10)
declare @tbl TABLE( colx varchar(10) )
set @checkvar ='a'

INSERT  INTO @tbl (colx) VALUES('a')
INSERT  INTO @tbl (colx) VALUES('b')
INSERT  INTO @tbl (colx) VALUES('c')
INSERT  INTO @tbl (colx) VALUES('d')

IF @checkvar  is null  select colx INTO #temp1 FROM @tbl
ELSE select colx INTO #temp1 FROM @tbl WHERE colx =@checkvar

错误是:数据库中已有一个名为“#temp1”的对象。

有没有一种优雅的方法可以解决这个问题? 如果@checkvar为空,我想要整个表 否则,只给我 @checkvar = some 的值

编辑:该列是 varchar,而不是 int。

最佳答案

您可以使用 WHERE 1=0 创建具有所需结构的空临时表。然后用您的原始代码插入所需的记录

SELECT colx INTO #temp1 
FROM   @tbl 
WHERE  1 = 0  // this is never true

IF @checkvar  IS NULL
BEGIN 
    INSERT INTO #temp1 (colName)   
    SELECT colx FROM @tbl 
END
ELSE 
BEGIN 
    INSERT INTO #temp1 (colName)   
    SELECT colx 
    FROM   @tbl 
    WHERE  colx = @checkvar 
END

关于sql - 在 IF .. ELSE 语句中使用临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712731/

相关文章:

sql - 使用 select 和 group by 的简单 SQL 查询

sql server 2008查找下周五或每月最后一天

sql-server - 无法连接: Adaptive Server is unavailable or does not exist

sql-server - StackOverflow 导入错误 : LOB beyond 2, 147,483,647 字节?

sql-server - SQL Server 全文搜索没有结果

sql-server-2005 - 如何获取sql server中两个日期之间的总小时数?

Mysql Multiple Concat Inner Join,只给出一个Name

sql - SAS Proc SQL 中的 CONVERT 语句

mysql - 如何对 mariadb SQL 中的每 N 行求和?

sql - 合并两个表上的连接结果