我目前正在使用的應用程序將生成一個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
這個腳本然後會產生這些交易的n
,然後將這個SQL Server 2005上excuted填充數據庫與n
記錄。
我看到的問題是上面顯示的變量@Foo
的聲明。當運行腳本,一旦我們達到了65535條記錄,我得到以下錯誤:
The variable name '@Foo' has already been declared.
Variable names must be unique within a query batch or stored procedure.
我認爲這是一個誤導性的錯誤消息,因爲一切都很好,直到我打了65535,並且這個數字的意義( 2^16-1)導致我相信我遇到某種腳本限制。
我曾嘗試在腳本的頂部定義一次@Foo
變量,並在每次事務中重新使用它。但是這不起作用,因爲每個交易都有其自己的範圍。
會創建一個額外的範圍級別(即一個內部事務)並在深層範圍內聲明該變量幫助解決此問題?
有關解決此問題的最佳方法的其他建議?
無論生成這些腳本是否會觸及限制而不是SQL Server - 例如,如果你檢查腳本,#65535看起來是否與以前一樣?另外,如果你打這樣的限制,這個過程是否仍然有意義?您是否考慮過其他選項來導入這些數據? –