【问题标题】:TSQL IF/ELSE or CASE (UPSERT)TSQL IF/ELSE 或 CASE (UPSERT)
【发布时间】:2018-05-21 20:31:54
【问题描述】:

不确定 IF/ELSE 是否是执行以下操作的正确方法。它总是返回 ELSE,所以它似乎无法正常工作。

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

这个测试应该得到yes,因为数据是8>0
我将用 UPDATE ELSE INSERT 语句替换 PRINT

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]')

【问题讨论】:

标签: sql-server tsql


【解决方案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
;

【讨论】:

  • 非常感谢您的示例。正如您所描述的,我使用MERGE 为这个问题创建了第二个问题。无论条件如何,我都确实遇到了插入问题,但我会查看这个答案,看看我能走多远。谢谢你。 stackoverflow.com/questions/47700748/…
猜你喜欢
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2011-01-08
  • 2013-10-19
  • 1970-01-01
  • 2023-02-06
相关资源
最近更新 更多