2017-12-07 5 views
0

IF/ELSEが次のような正しい方法であるかどうかは不明です。それは常に正しく動作しないようにELSEを返します。TSQL IF/ELSEまたはCASE(UPSERT)

IF ((SELECT COUNT(CAST(StudentuserID AS int)) FROM StudentAttendance WHERE StudentUserID=1)>0) 
PRINT 'Yes' 
ELSE 
PRINT 'No' 

データが8>0
であるとして、このテストでは、私がELSE UPDATEINSERT文でPRINTを交換するyesを生じるはずです。

IF ((SELECT COUNT(CAST(StudentuserID AS int)) FROM StudentAttendance WHERE StudentUserID=1)>0) 
UPDATE StudentAttendance 
SET 
CID = CAST('[querystring:CID]' AS int), 
CalendarEventID = CAST('[querystring:CEID]' AS int), 
StudentUserID = CAST('[StudentUserID]' AS int), 
Attendance = '[Attendance]' 
ELSE 
INSERT INTO StudentAttendance 
(CID,CalendarEventID,StudentUserID,Attendance) 
VALUES 
(CAST('[querystring:CID]' AS int), CAST('[querystring:CEID]' AS int), CAST('[StudentsUserID]' AS int),'[Attendance]') 
+2

[ 'MERGE'(https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql)アップサートすることができる:ここではその基本的な例であります。 @AlexK。 –

+0

あなたは例がありますか? – UserSN

+0

https://stackoverflow.com/questions/2479488/syntax-for-single-row-merge-upsert-in-sql-server –

答えて

1

は、それはあなたのIF/ELSE働くだろう罰金のように見えます(あなたがストアドプロシージャか何かで一つのレコードのためにこれをやっているように見えます?)。それは現在、「いいえ」の復帰だとあなたはそれがあるべきとは思わない場合は、私は多分、あなたのテーブルの上に多くの基本的なチェックを行うだろう。例:

SELECT * 
FROM StudentAttendance 
WHERE StudentUserID = 1 

また、このためにMERGEステートメントを使用することができ、かつUSINGパーツ内で複数のソーステーブルを結合して使用することができます。

DECLARE @A table (Aid int, value int) 
DECLARE @B table (Aid int, Cid int) 
DECLARE @C table (Cid int, value int) 

INSERT INTO @A VALUES (1, 1) 
INSERT INTO @B VALUES (1, 2) 
INSERT INTO @B VALUES (2, 3) 
INSERT INTO @C VALUES (2, 4) 
INSERT INTO @C VALUES (3, 6) 
; 

SELECT * 
FROM @A 
; 

MERGE INTO @A tgt 
USING (SELECT B.Aid, B.Cid, C.value FROM @B B JOIN @C C ON B.Cid = C.Cid) src 
ON tgt.Aid = src.Aid 

WHEN MATCHED THEN UPDATE 
SET tgt.value = src.value 

WHEN NOT MATCHED THEN 
INSERT 
(
    Aid 
    , value 
) 

VALUES 
(
    src.Aid 
    , src.value 
) 
; 

SELECT * 
FROM @A 
; 
+0

あなたの例に非常に感謝します。私はあなたが記述したように 'MERGE'を使ってこの問題の2番目の質問を作成しました。私は条件に関係なくインサートに問題がありましたが、私はこの回答を見直し、私がどれだけ得ることができるかを見ていきます。ありがとうございました。 https://stackoverflow.com/questions/47700748/tsql-merge-with-multiple-sources/47701401?noredirect=1#comment82365269_47701401 – UserSN