SQL Server에서 저장 프로 시저를 만들 때 존재하지 않는 테이블을 참조 할 수 있습니다. 그러나 테이블이 존재하는 경우 프로 시저에서 참조하는 모든 열이 해당 테이블에 있어야합니다 ( Deferred Name Resolution ).
존재 여부에 관계없이 프로 시저에서 참조 된 모든 테이블의 이름 확인을 연기하도록 SQL Server에 지시 할 수 있습니까? 일반적인 구문 검사를 유지하고 싶기 때문에 가능하더라도 저장 프로 시저 정의를 시스템 테이블에 해킹하는 것은 옵션이 아닙니다.
내가이가 보일 수 있습니다 할 묻는 것으로 예상 조금 이상한 비트 I 자동차는 C #로 작성된 응용 프로그램에서 테이블 정의 및 저장 프로 시저를 생성하고 나 SQL의 요구와 변화를 주문 코드를 변경하는 것은 매우 어려운 일 : 그래서 여기에 몇 가지 배경입니다 그들. 내 코드는 스키마가 트랜잭션 내에서 일관성이 있다는 것을 "보증"하지만 현재는 테이블 열이 참조되는 저장 프로 시저를 정의하기 전에 테이블 열이 정의되어 있음을 보장 할 수 없습니다.
아래는 C #에 의해 생성 된 SQL의 정식 예입니다.
--Say this table already exists.
CREATE TABLE myTable
(
a NVARCHAR(MAX)
)
GO
--My C# code creates something like this
BEGIN TRAN
GO
--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
SELECT a,b FROM myTable
END
--then the table update
ALTER TABLE myTable
ADD b nvarchar(MAX)
COMMIT TRAN
그것은 이다 나를 C # 코드에서이 문제를 해결하는 것이 가능하지만 간단한 "마술"나는 SQL에서 뽑을 수 조정할을 기대하고있다. 이렇게하면 많은 시간 이 절약됩니다 .