数据库是sql 2000create proc jczl_select_newidbytableandprefix  
@prefix varchar(20),
@tablename varchar(50),
@idname varchar(20),
@newid varchar(20) output
as
begin
 SELECT @newid=(@prefix+RIGHT(1001+ISNULL(RIGHT(MAX(str(@idname)),3),0),3)) FROM @tablename WITH(XLOCK,PAGLOCK)
end报错:服务器: 消息 156,级别 15,状态 1,过程 jczl_select_newidbytableandprefix,行 8
在关键字 'WITH' 附近有语法错误。

解决方案 »

  1.   

    --多了一个)号
    create proc jczl_select_newidbytableandprefix  
    @prefix varchar(20), 
    @tablename varchar(50), 
    @idname varchar(20), 
    @newid varchar(20) output 
    as 
    begin 
    SELECT @newid=(@prefix+RIGHT(1001+ISNULL(RIGHT(MAX(str(@idname)),3),0),3) FROM @tablename WITH(XLOCK,PAGLOCK) 
    end 
      

  2.   

    还是有错啊 这次是
    服务器: 消息 156,级别 15,状态 1,过程 jczl_select_newidbytableandprefix,行 8
    在关键字 'FROM' 附近有语法错误。
      

  3.   

    SELECT @newid=(@prefix+RIGHT(1001+ISNULL(RIGHT(MAX(str(@idname)),3),0),3)) FROM @tablename WITH(XLOCK,PAGLOCK) 得用sp_executesql吧!!!
      

  4.   

    create proc jczl_select_newidbytableandprefix  
    @prefix varchar(20), 
    @tablename varchar(50), 
    @idname varchar(20), 
    @newid varchar(20) output 
    as 
    begin 
    DECLARE @S NVARCHAR(4000)
    SET @S='SELECT @newid=(@prefix+RIGHT(1001+ISNULL(RIGHT(MAX(str(@idname)),3),0),3)) FROM @tablename WITH(XLOCK,PAGLOCK) D '
    EXEC sp_executesql @S
    end 
    试试
      

  5.   

    9楼的不行啊 程序中报错 说“必须声明变量 '@prefix'。”程序代码绝对没问题