我有一个插入数据的 SQL 脚本(通过当前数以千计的 INSERT 语句)其中一列包含一个唯一标识符(虽然不是 IDENTITY 类型,只是一个普通的 ol'int),它实际上在几个不同的表中是唯一的。
我想在我的脚本中添加一个标量函数来获取下一个可用 ID(即上次使用的 ID + 1),但我不确定这是否可行,因为似乎没有办法使用全局或UDF 中的静态变量,我不能使用临时表,也不能从函数中更新永久表。
目前我的脚本如下所示:
声明 @v_baseID int exec dbo.getNextID @v_baseID out --sproc 获取下一个可用的 id --很多这些 - 其中 n 是硬编码值 插入 tableOfStuff (someStuff, uniqueID) 值 ('stuff', @v_baseID + n ) exec dbo.UpdateNextID @v_baseID + lastUsedn --sproc 更新最后使用的id
但我希望它看起来像这样:
——很多这样 插入 tableOfStuff (someStuff, uniqueID) 值 ('stuff', getNextID() )
硬编码偏移量是一件很痛苦的事情,而且容易出错。将它打包成一个简单的标量函数非常吸引人,但我开始认为它不能那样做,因为似乎没有办法维持调用之间的偏移计数器。是这样吗,还是我缺少什么。
我们目前使用的是 SQL Server 2005。
编辑澄清:
两个用户点击它不会发生。这是一个升级脚本,只会运行一次,而且不会同时运行。
实际的 sproc 没有以 sp_ 为前缀,修复了示例代码。
在正常使用中,我们确实使用 id 表和 sproc 来根据需要获取 ID,我只是在此脚本中寻找一种更简洁的方法,它实际上只是将一堆数据转储到 db 中。