当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《在IF..ELSE语句中使用临时表》经验,为你挑选了2个好方法。

为什么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为null,我想要整个表,只给我@checkvar =的值

编辑:列是varchar,而不是int.



1> 小智..:

您可以使用创建具有所需结构的空临时表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



2> Rune Grimsta..:

你不能只重写声明吗?

SELECT colx INTO #temp1 FROM @tbl WHERE (@checkvar IS NULL) OR (colx = @checkVar)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有