현재 작업중인 응용 프로그램이 데이터베이스를 채울 SQL 스크립트를 생성합니다. 이 (내가 테이블/변수 이름 ;-)SQL Server 2005의 스크립트에서 최대 변수 선언 수 초과
이USE MyDatabase
BEGIN TRANSACTION
SET XACT_ABORT ON
DECLARE @Foo int
SET IDENTITY_INSERT Table1 ON
INSERT INTO Table1 [...]
SET IDENTITY_INSERT Table1 OFF
SET IDENTITY_INSERT Table2 ON
INSERT INTO Table2 [...]
SET IDENTITY_INSERT Table2 OFF
INSERT INTO Table3 [...]
-- Here I reference @Foo
SET @Foo = dbo.SomeStoredProcedure()
-- Use @Foo in some query
COMMIT TRANSACTION
GO
SET NOCOUNT ON
다음 SQL 서버 2005 excuted됩니다 이들 거래의 n
를 생성이 스크립트는의를 채울 수를 변경 한 메모와 같은 스크립트에서 하나의 트랜잭션이 보인다 n
레코드가있는 데이터베이스.
내가보고있는 문제는 위에 표시된 @Foo
변수의 선언입니다. 우리는 65535 기록에 도달하면, 스크립트를 실행할 때, 나는 다음과 같은 오류 얻을 : 나는 65535을 명중 할 때까지 모든 것이 잘 때문에,
The variable name '@Foo' has already been declared.
Variable names must be unique within a query batch or stored procedure.
내가이 잘못된 오류 메시지입니다 생각을하고,이 숫자의 의미 (2^16-1) 내가 일종의 스크립트 제한을 치고 있다고 믿게합니다.
나는 스크립트의 상단에서 한 번 @Foo
변수를 정의하고 각 트랜잭션 내에서 다시 사용하려고 시도했습니다. 그러나 이것은 각 거래가 자체 범위를 가지고있는 것처럼 보이기 때문에 작동하지 않습니다.
더 많은 범위 (즉, 내부 트랜잭션)를 만들고 더 깊은 범위 내에서 변수를 선언하면이 문제를 해결할 수 있습니까?
이 문제를 해결하는 가장 좋은 방법에 대한 기타 권장 사항은 무엇입니까?
이러한 스크립트를 생성하는 것은 무엇이든 SQL Server 대신 제한을 초과 할 수 있습니까? 예 : 스크립트를 검사하면 # 65535가 이전 스크립트와 똑같은 모양입니까? 또한, 당신이이 같은 한계를 치는 경우,이 과정은 여전히 의미가 있습니까? 이 데이터를 가져 오는 다른 옵션을 고려 했습니까? –