为什么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.
您可以使用创建具有所需结构的空临时表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
你不能只重写声明吗?
SELECT colx INTO #temp1 FROM @tbl WHERE (@checkvar IS NULL) OR (colx = @checkVar)