为什么存储过程允许在定义中引用不存在的表名?表列不允许这样做,仅适用于表。
示例:
您可以执行此代码,并创建存储过程。
CREATE PROCEDURE dbo.Test
AS
BEGIN
SELECT * FROM dbo.NonExistingTable -- Table does not exist in database model
END
此代码会引发错误。
CREATE PROCEDURE dbo.Test
AS
BEGIN
SELECT * FROM dbo.ExistingTable -- Table does exist in database model
WHERE NonExistingColumn = 0 -- but column does not exists in table
END
答案 0 :(得分:0)
这是因为表在物理上存在于数据库中。因此,当您尝试创建此过程时,它将尝试查看表模式中是否存在名为“NonExistingColumn”的列。
要了解更多信息,请尝试在脚本下方运行。
CREATE PROCEDURE HELLO
AS
BEGIN
CREATE TABLE NONEXISTINGTABLE (TID INT)
SELECT * FROM NONEXISTINGTABLE WHERE NONEXISTINGCOLUMN='N'
END
这不会产生任何错误,因为DB中也不存在表。所以它无法检查该列是否存在。