我有一张桌子,我们称之为A。我想从该表中删除 ID 为 1 和 2 的行。为此,我创建了一个表变量@B,其中包含值 1 和 2,但该列我将命名为PK。
现在我这样做:
DELETE FROM A
WHERE ID IN (
SELECT ID
FROM @B
)
Run Code Online (Sandbox Code Playgroud)
请注意我的(故意的)编程错误。在子选择中,我使用了错误的列名。意外地,它与表 A 中使用的名称相同。
这应该会导致“无效的列名”错误,对吧?但事实并非如此。它执行。不仅如此,表 A 中的所有数据都被删除。就好像不再有谓词一样。
我创建了一个完整的演示脚本:
-- What happened to my data???
IF OBJECT_ID('tempdb..#JustATable') IS NOT NULL
DROP TABLE #JustATable
CREATE TABLE #JustATable (
PK INT NOT NULL PRIMARY KEY IDENTITY(1, 1),
ID INT NOT NULL,
NOTE VARCHAR(100) NOT NULL
)
INSERT INTO #JustATable (ID, NOTE)
SELECT database_id, DB_NAME(database_id)
FROM …Run Code Online (Sandbox Code Playgroud)