CREATE PROCEDURE  SPty_InsertLocked
(
@jianzhi_user varchar(50),
@jianzhi_locked int,
@admin_locked int,
@tablename char(10),
@xh char(6),
@DAAJH char(13)
)
AS
SET NOCOUNT OFF;
INSERT INTO locked(jianzhi_user, jianzhi_locked, admin_locked, tablename, xh, DAAJH) 
VALUES (@jianzhi_user, @jianzhi_locked, @admin_locked, @tablename, @xh, @DAAJH);
exec('UPDATE   locked 
SET id = select id from '+@tablename+ ' WHERE (xh='+@xh+')and(DAAFH='+@DAAJH+')  
WHERE (tablename='+@tablename+')and(xh ='+@xh+')and(DAAJH ='+@DAAJH+')')
GO

解决方案 »

  1.   

    CREATE PROCEDURE  SPty_InsertLocked
    (
    @jianzhi_user varchar(50),
    @jianzhi_locked int,
    @admin_locked int,
    @tablename char(10),
    @xh char(6),
    @DAAJH char(13)
    )
    AS
    SET NOCOUNT OFF;
    INSERT INTO locked(jianzhi_user, jianzhi_locked, admin_locked, tablename, xh, DAAJH) 
    VALUES (@jianzhi_user, @jianzhi_locked, @admin_locked, @tablename, @xh, @DAAJH);加了  下面的 语法没有错误  但就是执行不了
    exec('UPDATE   locked 
    SET id = select id from '+@tablename+ ' WHERE (xh='+@xh+')and(DAAFH='+@DAAJH+')  
    WHERE (tablename='+@tablename+')and(xh ='+@xh+')and(DAAJH ='+@DAAJH+')')
    GO
      

  2.   

    exec('UPDATE locked
    SET id = (select top 1 id from '+@tablename+ ' WHERE (xh='+@xh+')and(DAAFH='+@DAAJH+'))
    WHERE (tablename='+@tablename+')and(xh ='+@xh+')and(DAAJH ='+@DAAJH+')')
      

  3.   

    为什么要用EXEC(UPDATE)的形式,而不直接用UPDATE呢?
      

  4.   

    CREATE PROCEDURE  SPty_InsertLocked
    (
    @jianzhi_user varchar(50),
    @jianzhi_locked int,
    @admin_locked int,
    @tablename char(10),
    @xh char(6),
    @DAAJH char(13)
    )
    AS
    SET NOCOUNT OFF;
    INSERT INTO locked(jianzhi_user, jianzhi_locked, admin_locked, tablename, xh, DAAJH) 
    VALUES (@jianzhi_user, @jianzhi_locked, @admin_locked, @tablename, @xh, @DAAJH);
    exec('UPDATE   locked 
    SET id = select id from '+@tablename+ ' WHERE (xh='''+@xh+''')and(DAAFH='''+@DAAJH+''')  
    WHERE (tablename='''+@tablename+''')and(xh ='''+@xh+''')and(DAAJH ='''+@DAAJH+''')')
    GO