2017-12-07 15 views
0

IF/ELSE가 다음을 수행하는 올바른 방법인지 확실하지 않습니다. 항상 제대로 작동하지 않는 것처럼 ELSE를 반환합니다. 데이터가 나는 ELSE INSERTUPDATE으로 PRINT 교체됩니다 8>0
같이TSQL IF/ELSE 또는 CASE (UPSERT)

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

이 테스트는 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) upsert 수 여기에 기본적인 예는 . –

+0

@AlexK 당신은 모범이 있습니까? – 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'를 사용하여이 문제에 대한 두 번째 질문을 만들었습니다. 조건에 관계없이 인서트에 문제가 있었지만이 대답을 검토하고 내가 얻을 수있는 거리를 볼 것입니다. 고맙습니다. https://stackoverflow.com/questions/47700748/tsql-merge-with-multiple-sources/47701401?noredirect=1#comment82365269_47701401 – UserSN