我意识到我所要求的可能是不可能的。我想基于LEFT JOIN和WHERE子句在两个单独的表上执行UPDATE。这是我的尝试:
UPDATE PERIODDATES as pd, periods2 as p2
SET pd.[PERIODCODE] = @PERIODCODE,
p2.[USERCODE] = @USERCODE
left join periods2 AS p2
ON pdates.schemeid = p2.schemeid AND
WHERE [SCHEMEID] = @SCHEMEID
这可能吗?
答案 0 :(得分:4)
这是不可能的。您只能在一个语句中更新一个表。你必须把它分成两个陈述。
编辑:
实际上可以在一个语句中更新两个表,但需要使用包含要更新的表的UNION
来创建视图。然后,您可以更新View,然后更新基础表。
对我来说这似乎有点黑客但它会起作用。
答案 1 :(得分:2)
在这里复制一个旧问题,但是......你可以通过包含在事务中的两个UPDATE查询来模拟在单个查询中更新多个表。这样您就不必使用up-datable视图变得混乱,除非两个表都成功更新,否则不会进行任何更改:
BEGIN TRANSACTION
UPDATE PERIODDATES AS pd
SET pd.PeriodCode = @PeriodCode
WHERE [SCHEMEID] = @SCHEMEID;
UPDATE periods2 AS pd2
SET pd2.[USERCODE] = @USERCODE
WHERE [SCHEMEID] = @SCHEMEID;
COMMIT;
对于您的插入,您可以使用@@ IDENTITY或OUTPUT INTO来获取要在第二个表中使用的新记录的ID,即:
DECLARE @ID int;
BEGIN TRANSACTION
INSERT INTO PERIODDATES( PeriodCode ) AS pd
VALUES ( @PeriodCode )
WHERE [SCHEMEID] = @SCHEMEID;
SELECT @ID = @@IDENTITY;
INSERT INTO periods2( [SCHEMEID], [USERCODE] ) AS pd2
VALUES ( @ID, @USERCODE );
COMMIT;