簡體   English   中英

Microsoft SQL Server-限制子查詢

[英]Microsoft SQL Server - restricting subqueries

這主要是一個好奇心問題。 我剛遇到一種情況,在測試數據庫上,我有以下查詢:

update table 
set column1 = 1 
where column2 in (1,2)

但這繼續執行,並產生以下錯誤:子查詢返回多個值。

現在,我檢查以確保沒有多個身份密鑰,或者“ in”值是唯一的。 因此,就所有意圖和目的而言,這都不應該發生。

檢查數據庫的LIVE副本,相同查詢沒有問題。 因此,最后,我的問題是:

您會如何處理會造成這種情況的Microsoft SQL Server設置或數據庫結構?

您會如何處理會造成這種情況的Microsoft SQL Server設置或數據庫結構?

如評論中所述,您可能沒有編寫好的觸發器。 示例場景:

CREATE TABLE aud(column2 INT, comment NVARCHAR(150));
CREATE TABLE tab(column1 INT, column2 INT);

INSERT INTO aud(column2) VALUES (1),(2),(3);
INSERT INTO tab(column1, column2) VALUES (0,1),(-1, 2), (-2,3);
GO

CREATE TRIGGER trg_tab_i ON tab 
FOR UPDATE
AS
BEGIN
   UPDATE aud
   SET comment = 'Changed value ...'
   WHERE column2 = (SELECT column2 FROM inserted);
END
GO


UPDATE tab
SET column1 = 1 
WHERE column2 in (1,2);

消息512,級別16,狀態1,過程trg_tab_i,第5行[批處理開始第19行]

子查詢返回的值超過1。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。

UPDATE tab
SET column1 = 1 
WHERE column2 in (1);
-- (1 row(s) affected)
-- (1 row(s) affected)

DBFiddle演示

當只有一行受到影響時,一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM