据我所知,sqlserver数据库存储过程不支持数据库表名作参数。

解决方案 »

  1.   

    用动态SQL
    EXEC ('SELECT * FROM @TableName' )
      

  2.   

    CREATE PROC DBO.TEST
    @No varchar(50),
    @TableName varchar(10) exec('IF EXISTS(SELECT 序号 FROM '+@TableName +'
    WHERE 序号='''+@No+''')
    BEGIN
    SELECT * FROM '+@TableName+'
    END')
      

  3.   

    优化一下:CREATE PROC DBO.TEST
    @No varchar(50),
    @TableName varchar(10) exec('IF EXISTS(SELECT 1 FROM '+@TableName+'
    WHERE 序号='''+@No+''')
    SELECT * FROM '+@TableName)
      

  4.   

    自己查查EXECUTE和sp_executesql 的帮助
      

  5.   

    CREATE PROC DBO.TEST
    @No varchar(50),
    @TableName varchar(10)
    as
    exec('IF EXISTS(SELECT 序号 FROM '+@TableName +'
    WHERE 序号='''+@No+''')
    BEGIN
    SELECT * FROM '+@TableName+'
    END')
      

  6.   

    多谢相助。但是,RETURN (1)怎么办?语句中好像不支持RETURN值。如果
    declare @retcode SMALLINT
    EXEC('SET '+@retcode+'=1')调试通不过?语法上如何改?
      

  7.   

    例:Create Procedure GetMaxID
    @TableName varchar(100), @ID int output
    as
    begin
    declare @sql nvarchar(1000)
    set @sql='select @ID = max(ID) from '+@TableName
    exec sp_executesql @sql,N'@id int output',@id output
    end