我正在使用SQL Server 2012(v11.0.2100),我想创建一个以随机(动态)数字开头的序列,但我无法做到这一点,我也努力寻找一个好的解决方案为此,但我没有找到能满足我的东西。
我尝试过但失败的案例:
DECLARE @sth bigint
SET @sth = 1000
ALTER SEQUENCE StreamEntrySequence
RESTART WITH @sth;
错误:
'@sth'附近的语法不正确
丑陋的解决方案
declare @sth bigint;
declare @i bigint;
SET @sth = 100000 ;
while @i<@sth;
BEGIN
SET @i= next value for StreamEntrySequence;
END
还有其他方法可以将当前值或起始值设置为随机值吗?也许使用服务器程序?
答案 0 :(得分:10)
如前所述,这需要动态SQL,因为alter sequence需要restart
参数的常量。
你可能会这样做,然后:
DECLARE @sth bigint;
SET @sth = 1000;
DECLARE @sql nvarchar(max);
SET @sql = N'ALTER SEQUENCE StreamEntrySequence RESTART WITH ' + cast(@sth as nvarchar(20)) + ';';
EXEC SP_EXECUTESQL @sql;
答案 1 :(得分:2)
尝试
ALTER SEQUENCE foo.fee
RESTART
或者:
ALTER SEQUENCE foo.fee
RESTART WITH 1
答案 2 :(得分:0)
随便用
SELECT setval('seq',0,false);
它将序列“seq”的值设置为0。