我试了很多东西让这段代码变得更聪明......正如你所看到的......它总是一样的...一个变量可以有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更熟悉的人可以帮助我更聪明地使用这段代码吗?
答案 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
假设所有列都可以为空。