为什么不接受整数变量作为按顺序开始的值

cwxwcias  于 2022-09-18  发布在  Java
关注(0)|答案(3)|浏览(132)

我正在尝试为序列创建动态开始编号,但它不接受变量VIZ。@START_SEQ表示START WITH。请考虑以下代码:

  1. CREATE PROCEDURE [dbo].[SP_RESET_SEQ]
  2. AS
  3. DECLARE @START_SEQ INT =0;
  4. BEGIN
  5. SET @START_SEQ = (SELECT MAX(USER_ID)+1 FROM MASTER_USER);
  6. IF OBJECT_ID('SEQ_USER_ID') IS NOT NULL
  7. DROP SEQUENCE [dbo].[SEQ_USER_ID]
  8. CREATE SEQUENCE [dbo].[SEQ_USER_ID]
  9. AS [bigint]
  10. START WITH @START_SEQ
  11. INCREMENT BY 1
  12. MINVALUE 1
  13. MAXVALUE 99999999
  14. CACHE
  15. END
cunj1qz1

cunj1qz11#

您可以对动态SQL执行相同的操作:

  1. CREATE PROCEDURE [dbo].[SP_RESET_SEQ]
  2. AS
  3. DECLARE @START_SEQ INT =0;
  4. BEGIN
  5. SET @START_SEQ = (SELECT MAX(USER_ID)+1 FROM MASTER_USER);
  6. IF OBJECT_ID('SEQ_USER_ID') IS NOT NULL
  7. DROP SEQUENCE [dbo].[SEQ_USER_ID]
  8. DECLARE @sql NVARCHAR(MAX)
  9. SET @sql = 'CREATE SEQUENCE [dbo].[SEQ_USER_ID]
  10. AS [bigint]
  11. START WITH ' + @START_SEQ
  12. + 'INCREMENT BY 1
  13. MINVALUE 1
  14. MAXVALUE 99999999
  15. CACHE'
  16. EXEC(@sql)
  17. END

正如下面的ta.speot.is所指出的(谢谢!),CREATE SEQUENCE的语法接受一个常量(参见MSDN)。

展开查看全部
hvvq6cgz

hvvq6cgz2#

上例中的另一个不适用于我

  1. declare @maxBookingId as int
  2. select @maxBookingId = max(bookingid) from booking
  3. declare @s nvarchar(4000);
  4. set @s = N'
  5. CREATE SEQUENCE Invoice_Seq AS INTEGER
  6. START WITH ' + cast(@maxBookingId as nvarchar) + '
  7. INCREMENT BY 1
  8. NO CYCLE;'
  9. EXEC (@s);
ruarlubt

ruarlubt3#

在CREATE SEQUENCE中不需要作为整数

将@MaxBookingId声明为int;
SELECT@MaxBookingID=max(Bookingid)from Booking;
声明@s nvarchar(4000);
设置@s=N‘
创建序号发票_序号
以‘+cast(@MaxBookingID as nvarchar)+’开头
递增1
没有循环;‘
Exec(@s);

此脚本非常适合集成到增量分发中

相关问题