如果是的话,如果......代码想要变得更聪明

时间:2013-04-04 14:03:10

标签: sql-server tsql

我试了很多东西让这段代码变得更聪明......正如你所看到的......它总是一样的...一个变量可以有6个不同的值......它决定了哪一列会写入其他值。 ..如果记录集仍然存在,我进行“更新......”否则我会“插入...”

我尝试做一些动态的SQL ...但它不起作用......

我尝试做一些“CASE ...”代码......但它不起作用......

此代码有效:

-- How many roads must a man walk down...
IF @DatenFeld = 'weaNr'
    IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
        INSERT INTO @StaDa_Table (DatenSatz, weaNr ) VALUES (@DatenSatz, Convert(nvarchar(20),@DatenWert))
    ELSE
        UPDATE @StaDa_Table SET weaNr = Convert(nvarchar(20),@DatenWert) WHERE DatenSatz=@DatenSatz
ELSE
    IF @DatenFeld = 'weaTyp'
        IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
            INSERT INTO @StaDa_Table (DatenSatz, weaTyp ) VALUES (@DatenSatz, Convert(nvarchar(20),@DatenWert))
        ELSE
            UPDATE @StaDa_Table SET weaTyp = Convert(nvarchar(20),@DatenWert) WHERE DatenSatz=@DatenSatz
    ELSE    
        IF @DatenFeld = 'nennP_W'
            IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
                INSERT INTO @StaDa_Table (DatenSatz, nennP_W ) VALUES (@DatenSatz, Convert(int,@DatenWert))
            ELSE
                UPDATE @StaDa_Table SET nennP_W = Convert(int,@DatenWert) WHERE DatenSatz=@DatenSatz
        ELSE
            IF @DatenFeld = 'refErt_Wh'
                IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
                    INSERT INTO @StaDa_Table (DatenSatz, refErt_Wh ) VALUES (@DatenSatz, Convert(bigint,@DatenWert))
                ELSE
                    UPDATE @StaDa_Table SET refErt_Wh = Convert(bigint,@DatenWert) WHERE DatenSatz=@DatenSatz
            ELSE
                IF @DatenFeld = 'inbetrieb'
                    IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
                        INSERT INTO @StaDa_Table (DatenSatz, inbetrieb ) VALUES (@DatenSatz, Convert(datetime,@DatenWert))
                    ELSE
                        UPDATE @StaDa_Table SET inbetrieb = Convert(datetime,@DatenWert) WHERE DatenSatz=@DatenSatz
                ELSE
                    IF @DatenFeld = 'uw'
                        IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
                            INSERT INTO @StaDa_Table (DatenSatz, uw ) VALUES (@DatenSatz, Convert(nvarchar(50),@DatenWert))
                        ELSE
                            UPDATE @StaDa_Table SET uw = Convert(nvarchar(50),@DatenWert) WHERE DatenSatz=@DatenSatz

...也许对tsql更熟悉的人可以帮助我更聪明地使用这段代码吗?

1 个答案:

答案 0 :(得分:1)

也许这样的事情会有所帮助:

declare @weaNr nvarchar(20) = null
declare @weaTyp nvarchar(20) = null
declare @nennP_W int = null
declare @refErt_Wh bigint = null
declare @inbetrieb datetime = null
declare @uw nvarchar(50) = null

select  @weaNr = case when @DatenFeld = 'weaNr' then Convert(nvarchar(20),@DatenWert) end
        ,@weaTyp = case when @DatenFeld = 'weaTyp' then Convert(nvarchar(20),@DatenWert) end
        ,@nennP_W = case when @DatenFeld = 'nennP_W' then Convert(int,@DatenWert) end
        ,@refErt_Wh = case when @DatenFeld = 'refErt_Wh' then Convert(bigint,@DatenWert) end
        ,@inbetrieb = case when @DatenFeld = 'inbetrieb' then Convert(datetime,@DatenWert) end
        ,@uw = case when @DatenFeld = 'uw' then Convert(nvarchar(50),@DatenWert) end

IF NOT EXISTS(SELECT * FROM @StaDa_Table WHERE DatenSatz=@DatenSatz)
    INSERT INTO @StaDa_Table (DatenSatz, weaNr, weaTyp, nennP_W, refErt_Wh, inbetrieb, uw ) 
    VALUES (@DatenSatz, @weaNr, @weaTyp, @nennP_W, @refErt_Wh, @inbetrieb, @uw)
ELSE
    UPDATE  @StaDa_Table
    SET     weaNr = ISNULL(@weaNr, weaNr)
            ,weaTyp = ISNULL(@weaTyp, weaTyp)
            ,nennP_W = ISNULL(@nennP_W, nennP_W)
            ,refErt_Wh = ISNULL(@refErt_Wh, refErt_Wh)
            ,inbetrieb = ISNULL(@inbetrieb, inbetrieb)
            ,uw = ISNULL(@uw, uw)
    WHERE DatenSatz=@DatenSatz

假设所有列都可以为空。