我想用字符串传递表名:create proc [dbo].[DeleteMulti](@forumID int, @tableName char(50))
AS
...if (Exists(Select ID from @tableName where ParentID=@temp and ForumID=@forumID))
begin
select @delID=ID from @tableName Where ParentID=@delID  and ForumID=@forumID
set @temp = @delID
end
...为什么老说我没有声明@tableName变量呢?
@tableName不是传入的参数吗?

解决方案 »

  1.   

    不能这样做的.应该用动态sql
      

  2.   

    如: exec('select  * from '+@tableName)
      

  3.   

    在存储过程中能不能用exec('...')?
      

  4.   

    为什么能传递int,而不能传递字符串呢??
      

  5.   

    不能这样做的.应该用动态sql
    对的 表明不能传 必须拼!
      

  6.   

    Select ID from @tableName where ParentID=@temp and ForumID=@forumID===============FROM 字句中 表名 不支持使用参数
      

  7.   

    可以传递字符串的,用string传递
    把你的代码全部贴上吧
      

  8.   

    代码就这样:
     CREATE     PROCEDURE   PROC_TEST   (@TableName   varchar(50))   
      AS   
             select Name from @TableName where ParentID <> 0 
      GO  谢谢。
      

  9.   

    CREATE     PROCEDURE   PROC_TEST   (@TableName   varchar(50))   
      AS   
            exec(' select Name from'+ @TableName +'where ParentID <> 0 ')
      GO
      

  10.   

    CREATE     PROCEDURE   PROC_TEST   (@TableName   varchar(50))   
      AS   
            exec(' select Name from'+ @TableName +' where ParentID <> 0 ')
      GO
      

  11.   

    知道,谢谢各位。动态sql语句基本语法     
      1   :普通SQL语句可以用Exec执行     
        
      eg:       Select   *   from   tableName     
                        Exec('select   *   from   tableName')     
                        Exec   sp_executesql   N'select   *   from   tableName'         --   请注意字符串前一定要加N     
        
      2:字段名,表名,数据库名之类作为变量时,必须用动态SQL     
        
      eg:         
      declare   @fname   varchar(20)     
      set   @fname   =   'FiledName'     
      Select   @fname   from   tableName                             --   错误,不会提示错误,但结果为固定值FiledName,并非所要。     
      Exec('select   '   +   @fname   +   '   from   tableName')           --   请注意   加号前后的   单引号的边上加空格     
        
      当然将字符串改成变量的形式也可     
      declare   @fname   varchar(20)     
      set   @fname   =   'FiledName'   --设置字段名     
        
      declare   @s   varchar(1000)     
      set   @s   =   'select   '   +   @fname   +   '   from   tableName'     
      Exec(@s)                                 --   成功     
      exec   sp_executesql   @s       --   此句会报错     
        
        
        
      declare   @s   Nvarchar(1000)     --   注意此处改为nvarchar(1000)     
      set   @s   =   'select   '   +   @fname   +   '   from   tableName'     
      Exec(@s)                                 --   成功             
      exec   sp_executesql   @s       --   此句正确     
        
      3.   输出参数     
      declare   @num   int,     
                      @sqls   nvarchar(4000)     
      set   @sqls='select   count(*)   from   tableName'     
      exec(@sqls)     
      --如何将exec执行结果放入变量中?     
        
      declare   @num   int,     
                                    @sqls   nvarchar(4000)     
      set   @sqls='select   @a=count(*)   from   tableName   '     
      exec   sp_executesql   @sqls,N'@a   int   output',@num   output     
      select   @num