2013-04-04 148 views
1

我尝试了很多,你看到得到这个代码更聪明......它总是一样的...一个变量可以有6倍不同的值。 ..这决定在哪一列的其他值将被写入......如果记录仍然存在,我做一个“更新...”别的我做的“插入...”IF ELSE IF ELSE IF ....代码想要变得更聪明

我试着做一些动态SQL ...但它不工作...

我试着做一些“CASE ...”代码...但它不工作...

此代码的工作:

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

...所以也许有人北京时间哪个更熟悉TSQL可以帮助我得到这个代码更聪明?

+4

*它不工作*是不是一个非常有用的评论 - 请** **解释为何以及如何不起作用;你会得到一个错误 - 如果是这样的话:***你得到了什么***错误?它没有返回任何值吗?错误的值?它回来了什么,你期望什么? – 2013-04-04 14:06:18

+0

你知道有一个'case'声明,你已经尝试过了 - 你有谷歌它看它是如何使用? – 2013-04-04 14:06:38

+1

人们不应该忘记问永恒的问题:你有什么尝试?至今? “请为我做,大声笑”并不真正在SO上工作。 ;-) – akluth 2013-04-04 14:07:27

回答

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 [email protected]) 
    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 [email protected] 

假设所有列都为空。