Create Proc AA
AS 
declare @MaxID int
set  EXECUTE @MaxID = alloc_id "userinfo"
INSERT INTO userinfo(id)
VALUES (@MaxID)
------------------------------------------------
--我想用alloc_id存储过程取出表中的最大ID
------------------------------------------------
ALTER  PROCEDURE dbo.alloc_id
@tbname VARCHAR(32)
AS
BEGIN
BEGIN TRANSACTION
UPDATE table_alloc_id SET id = id + 1 WHERE tablename = @tbname
IF @@rowcount = 0
BEGIN
INSERT INTO table_alloc_id VALUES(@tbname, 1)
END
SELECT id FROM table_alloc_id WHERE tablename = @tbname
COMMIT TRANSACTION
END
-------------------------
为什么@MaxID是0呢?请问该如何改写alloc_id 呢?

解决方案 »

  1.   

    ALTER PROCEDURE dbo.alloc_id
    @tbname VARCHAR(32)
    AS
    BEGIN
    BEGIN TRANSACTION
    declare @i int--------添加
    UPDATE table_alloc_id SET id = id + 1 WHERE tablename = @tbname
    IF @@rowcount = 0
    BEGIN
    INSERT INTO table_alloc_id VALUES(@tbname, 1)
    END
    SELECT @i=id FROM table_alloc_id WHERE tablename = @tbname
    return @i-----------------添加
    COMMIT TRANSACTION
    END
      

  2.   

    我按照上面的改了
    可是我执行该语句的时候 报错
    declare @MaxID int
    set EXECUTE @MaxID = alloc_id2 "userinfo"
    -------------------------
    (所影响的行数为 1 行)服务器: 消息 266,级别 16,状态 2,过程 alloc_id2,行 13
    EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 4,当前计数 = 5。
      

  3.   

    我按照上面的改了
    可是我执行该语句的时候 报错
    declare @MaxID int
    set EXECUTE @MaxID = alloc_id "userinfo"
    -------------------------
    (所影响的行数为 1 行)服务器: 消息 266,级别 16,状态 2,过程 alloc_id,行 13
    EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 4,当前计数 = 5。
      

  4.   

    ALTER PROCEDURE dbo.alloc_id
    @tbname VARCHAR(32)
    ASSET NOCOUNT ON
    SET XACT_ABORT ON
    declare @i int--------添加
    UPDATE table_alloc_id SET id = id + 1 WHERE tablename = @tbname
    IF @@rowcount = 0
    BEGIN
    INSERT INTO table_alloc_id VALUES(@tbname, 1)
    END
    SELECT @i=id FROM table_alloc_id WHERE tablename = @tbname
    return @i-----------------添加
    COMMIT TRANSACTION 
    SET XACT_ABORT OFF
    SET NOCOUNT OFF
      

  5.   

    http://www.codelover.com/dev/5704/4922893.htm
    它只将消息发送到客户端而不影响执行