2011-05-31 89 views
3

我想创建一个基于以下方式存储过程:通用选择存储过程

ALTER PROCEDURE spGetLastId 
(
@table_name varchar(100) 
) 
AS 
BEGIN 
    DECLARE @DBSql varchar(2000) 
    SET @DBSql = 'SELECT MAX(id) as ''LastId'' FROM ' + @table_name 
    EXEC sp_executesql @DBSql 
END 

此过程将不得不显示我作为传递任何参数表的最后一个ID。

感谢和问候,

回答

3

变化@DBSqlvarcharnvarchar,并且将工作,或者看内置IDENT_CURRENT()

+0

好点,我没有发现那一个! – TabbyCool 2011-05-31 13:15:02

+0

@Alex K.非常感谢! – mcamara 2011-05-31 13:30:47

0

我知道做这种工作的唯一用例是使用构建自己的IDENTITY字段。

如果你这样做,请停止并使用SQL Server提供的IDENTITY。

如果您想将自己的值插入IDENTITY列,请参阅SET IDENTITY_INSERT TABLENAME ON;

1

不知道这是否就是你要找什么,但如果你插入记录然后检索产生那么您可以在插入后使用SELECT SCOPE_IDENTITY()的最后一个标识值...

INSERT INTO MyTable (col1, col2) 
VALUES (val1, val2); 
SELECT SCOPE_IDENTITY() 

否则,你的过程应该为你想要的工作,尽管你应该把@DbSql的数据类型改为nvarchar而不是varchar。