好的,我对您来说可能是一个非常简单的问题,对您的Sql专家而言……
给定某种 bool(boolean) 值T,我想用数据集A(如果T为true)或数据集B(如果T为false)填充临时表。我以为这是怎么做的:
DECLARE @foo INT
SET @foo = null
IF (@foo is null)
BEGIN
SELECT 'foo was null' INTO #TempTable
END
ELSE
BEGIN
SELECT 'foo not null' INTO #TempTable
END
但这是行不通的。我收到一条错误消息:“数据库中已经有一个名为'#TempTable'的对象。”
显然,在每种情况下,Sql都会尝试创建表,然后才评估条件...?这对我来说似乎很奇怪,但是可以。但是做这种事情的正确方法是什么?
编辑:我在Sql Server中,但是我怀疑这是一个更普遍的问题...但是如果我错了,请告诉我。
最佳答案
您需要先创建您的临时表(应该做一次):
CREATE TABLE #TempTable TABLE (
message VARCHAR(50)
)
,然后发出:
DECLARE @foo INT
SET @foo = null
IF (@foo is null)
BEGIN
INSERT
INTO #TempTable
SELECT 'foo was null'
END
ELSE
BEGIN
INSERT
INTO #TempTable
SELECT 'foo not null'
END
可能您不想要
TEMPORARY TABLE
,而是想要TABLE VARIABLE
(仅存在于 session 中,并且不持久存在于数据库模式中):DECLARE @foo INT
DECLARE @TempTable TABLE (
message VARCHAR(50)
)
SET @foo = null
IF (@foo is null)
BEGIN
INSERT
INTO @TempTable
SELECT 'foo was null'
END
ELSE
BEGIN
INSERT
INTO @TempTable
SELECT 'foo not null'
END
关于sql - 如何选择如何在SQL中填充#temptable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/777475/