2012-01-23 2 views
2

현재 작업중인 응용 프로그램이 데이터베이스를 채울 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 변수를 정의하고 각 트랜잭션 내에서 다시 사용하려고 시도했습니다. 그러나 이것은 각 거래가 자체 범위를 가지고있는 것처럼 보이기 때문에 작동하지 않습니다.

더 많은 범위 (즉, 내부 트랜잭션)를 만들고 더 깊은 범위 내에서 변수를 선언하면이 문제를 해결할 수 있습니까?

이 문제를 해결하는 가장 좋은 방법에 대한 기타 권장 사항은 무엇입니까?

+0

이러한 스크립트를 생성하는 것은 무엇이든 SQL Server 대신 제한을 초과 할 수 있습니까? 예 : 스크립트를 검사하면 # 65535가 이전 스크립트와 똑같은 모양입니까? 또한, 당신이이 같은 한계를 치는 경우,이 과정은 여전히 ​​의미가 있습니까? 이 데이터를 가져 오는 다른 옵션을 고려 했습니까? –

답변

1

GO 구분 기호를 놓친 것처럼 보입니다. 스크립트가 개이고, 더 많은 행이 개 있습니다. 스크립팅 솔루션을 확인하십시오

+0

자세히 설명해 주시겠습니까? 한 번씩 (각'GO 문 사이에) 각 배치를 실행하기 때문에 이것이 어떻게 도움이되는지 잘 모르겠습니다. – LeopardSkinPillBoxHat

+0

스크립트를 만들고 실행하지 않고 검사 할 수 있습니까? SSMS에서 실행 해 봅니다. 오류가 발생하면 오류 줄 –

+0

을 가리 킵니다. 스크립트는 170MB이며 SSMS에서 열려고하면 "작업을 완료 할 수 없습니다."라는 오류가 발생합니다. 나는 이것을 처음으로 경험 한 사람이 아닌 것처럼 보입니다 : http://connect.microsoft.com/SQLServer/feedback/details/269566/sql-server-management-studio-cant-handle-large-files – LeopardSkinPillBoxHat

-1

이동 구분 기호를 사용하고 dynmc의 데이터 유형도 변경하십시오. 변하기 쉬운. 당신은 범위를 벗어나고 "INT"는 SQL Server의 순환 데이터 형식입니다. -65536에서 65535 사이의주기가 완료 될 때 같은 주소로 올 것입니다.

+0

'int'는 SQL Server에서 4 바이트이므로 65535로 묶는 이유를 설명하지 않습니다. http://msdn.microsoft.com /en-us/library/ms187745.aspx – LeopardSkinPillBoxHat

+0

"GO"구분 기호로 무엇을 의미하는지 설명해 주시겠습니까? 나는 무엇을 놓쳤는가? – LeopardSkinPillBoxHat