好的,我对您来说可能是一个非常简单的问题,对您的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/

10-12 12:21
查看更多