我目前正在开发的一个应用程序将生成一个SQL脚本来填充数据库。脚本中的单个事务如下所示(请注意,我已经更改了表/变量名称;-)
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 Server2005上执行,以便使用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变量,并在每个事务中重用它。但这并不起作用,因为似乎每个事务都有自己的作用域。
创建额外的作用域级别(即内部事务)并在更深的作用域中声明变量是否有助于解决此问题?
关于解决这个问题的最佳方法,还有其他建议吗?
发布于 2012-01-23 14:18:18
尝试使用Go分隔符,同时更改dynmc的数据类型。变量。您超出了它的范围,而"INT“在SQL服务器中是一种循环数据类型。当-65536到65535的周期结束时,它将到达相同的地址。
https://stackoverflow.com/questions/8967396
复制相似问题