[英]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)
當只有一行受到影響時,一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.