【发布时间】:2010-09-06 21:30:36
【问题描述】:
我有一个插入数据的 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 中。
【问题讨论】:
标签: sql sql-server sql-server-2005