如何从存储过程运行到序列?

时间:2015-06-29 10:12:37

标签: sql-server stored-procedures sql-server-2012 sequence

我正在尝试从存储过程运行序列。我将序列的名称传递给存储过程,存储过程将返回序列值,但存储过程不识别传递的序列名称。错误说:

  

' @ SeqName'附近的语法不正确。

以下是我的尝试:

ALTER PROCEDURE [dbo].[GetSeqNextValue] 
   (@SeqName varchar(50), @NewNum bigint output) 
AS
BEGIN
    SET @NewNum = NEXT VALUE FOR @SeqName
END

2 个答案:

答案 0 :(得分:3)

您需要一些动态查询:

DECLARE @s NVARCHAR(100) =  'SET @NewNum = NEXT VALUE FOR ' + QUOTENAME(@SeqName)
EXEC sp_executesql @s, N'@NewNum bigint output', @NewNum OUTPUT

答案 1 :(得分:2)

你可以改变你的程序。

ALTER PROCEDURE [dbo].[GetSeqNextValue] (@SeqName varchar(50), @NewNum bigint output) 

AS

BEGIN
  Declare  @SQL  Nvarchar(1000)

  Set @SQL  = 'SELECT @NewNum = Next Value for ' + @SeqName 
  Exec sp_executesql @Sql,N'@NewNum bigint output',@NewNum output 


END