Microsoft SQL Server проверяет правильность имени столбца, но не правильность имени таблицы при определении хранимых процедур. Если он обнаруживает, что имя таблицы, на которую ссылаются, существует в настоящее время, он проверяет имена столбцов в выражении на соответствие столбцам в этой таблице. Так, например, это будет работать нормально:
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
Col1, Col2, Col3
FROM
NonExistentTable
END
GO
... как будет это:
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
ExistentCol1, ExistentCol2, ExistentCol3
FROM
ExistentTable
END
GO
... но это не удается, с «Неверное имя столбца»:
CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN
SELECT
NonExistentCol1, NonExistentCol2, NonExistentCol3
FROM
ExistentTable
END
GO
Почему SQL Server проверяет наличие столбцов, а не таблиц? Конечно, это противоречиво; это должно делать и то, и другое. Для нас полезно иметь возможность определять SP, которые могут ссылаться на столбцы таблиц И / ИЛИ, которые еще не существуют в схеме, поэтому есть способ отключить проверку SQL Server существования столбцов в таблицах, которые в настоящее время есть