1

为了让这段代码更智能,我做了很多尝试……如您所见……它总是一样的……一个变量可以有 6 个不同的值……这决定了在哪一列中写入其他值……如果记录集仍然存在我进行“更新...”否则我进行“插入...”

我试图做一些动态的sql...但它不起作用...

我试图做一些“案例......”代码......但它不起作用......

此代码有效:

-- 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 的人可以帮助我使这段代码更聪明?

4

1 回答 1

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

假设所有列都可以为空。

于 2013-04-04T15:06:56.437 回答