日期:2014-05-17  浏览次数:20371 次

一个语句改为存储过程的问题
SQL code

declare @NextIdentity int

SELECT @NextIdentity = IDENT_CURRENT('TableName') + IDENT_INCR('TableName') from TableName

if (@NextIdentity is null)

   set @NextIdentity = IDENT_SEED('TableName')


原语句是这个,但是直接运行只是一个运行完成没有返回结果
然后为了活用,放到存储过程
SQL code

GO
/****** Object:  StoredProcedure [dbo].[NextIDENT]    Script Date: 05/16/2012 12:32:55 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO


ALTER PROCEDURE [dbo].[NextIDENT]
(
@tblName varchar(255) -- 表名
)
AS
declare @NextIdentity int
begin
SELECT @NextIdentity = IDENT_CURRENT(@tblName) + IDENT_INCR(@tblName) from bx_Posts
if (@NextIdentity is null)
 set @NextIdentity = IDENT_SEED(@tblName)
end 
exec(@NextIdentity)




总提示
消息 102,级别 15,状态 1,第 1 行
'30' 附近有语法错误。

(1 行受影响)
那个30已经是结果了。。还给出错了。。

而且from后边不能使用变量。我想做活了,后边也跟变量的。就报错呢。。
SQL code
SELECT @NextIdentity = IDENT_CURRENT(@tblName) + IDENT_INCR(@tblName) from bx_Posts
想把bx_Posts这个也变成变量传递的

------解决方案--------------------
SQL code
GO
alter PROCEDURE [dbo].[NextIDENT]
(
    @tblName varchar(255) -- 表名
)
AS
exec('
declare @NextIdentity int
SELECT @NextIdentity = IDENT_CURRENT('''+@tblName+''') + IDENT_INCR('''+@tblName+''') from '+@tblName+'
if (@NextIdentity is null)
 begin  
    set @NextIdentity = IDENT_SEED('''+@tblName+''')
 end
select @NextIdentity')
Go
[NextIDENT] 'Flow_Class'