ALTER PROCEDURE [dbo].[CreateResult]
@UserName varchar(50),
@TableName varchar(255),--表名
@StrWhere nvarchar(1000)='' , --查询条件
@resultTable varchar(50)

AS
declare @str nvarchar(4000)
declare @searchtable varchar(50)
set @searchtable=@UserName+'_searchTable'
if @StrWhere !=''
set @str='select * from '+@TableName +' where '+@StrWhere
else
set @str='select * from '+@TableName
set @str='insert into '+@resultTable+' '+@str+' update '+@searchtable+' set result=1  where resultTable='+@resulTable+''
exec (@str)
消息 137,级别 15,状态 2,过程 CreateResult,第 17 行
必须声明标量变量 "@resulTable"。

解决方案 »

  1.   

    哦,resultTable不小心改错了。问题是,无法执行更新操作!
      

  2.   

    你先print @str出来看看,貌似你的语法有问题。
    ALTER PROCEDURE [dbo].[CreateResult]
        @UserName VARCHAR(50) ,
        @TableName VARCHAR(255) ,--表名 
        @StrWhere NVARCHAR(1000) = '' , --查询条件 
        @resultTable VARCHAR(50)
    AS 
        DECLARE @str NVARCHAR(4000)
        DECLARE @searchtable VARCHAR(50)
        SET @searchtable = @UserName + '_searchTable'
        IF @StrWhere != '' SET @str = 'select * from ' + @TableName + ' where '
                + @StrWhere
        ELSE 
            SET @str = 'select * from ' + @TableName
        SET @str = 'insert into ' + @resultTable + ' ' + @str + ' update '
            + @searchtable + ' set result=1  where resultTable=' + @resultTable
            + ''
        EXEC (@str) 
      

  3.   


    在执行完这条语句的时候
    set @str='select * from '+@TableName
    把变量打印出来看一下,再执行一下打印出来的sql 看哪出问题了
    如果没问题再打印下一条sql
      

  4.   

    不懂 貌似 没有 insert into select update 这样的语句吧 要不 你先插入 再更新吧
      

  5.   

    ALTER PROCEDURE [dbo].[CreateResult]
    @UserName varchar(50),
    @TableName varchar(255),--表名
    @StrWhere nvarchar(1000)='' , --查询条件
    @resultTable varchar(50)
    ASdeclare @str nvarchar(4000)   
    declare @searchtable varchar(50)set @searchtable=@UserName+'_searchTable'if @StrWhere !=''
    set @str='select * from '+@TableName +' where '+@StrWhere
    else
    set @str='select * from '+@TableName

    set @str='insert into '+@resultTable+' '+@str+'; update '+@searchtable+' set result=1  where resultTable='''+@resultTable+''''
    exec (@str)
      

  6.   

    exec (@str) 换成exec sp_executesql @str 试试
      

  7.   

    exec先最好先print出来看字串,放到查询分析器里一看就知道问题所在
      

  8.   

    最后一个@resulTable  少些一个t
    @resultTable
      

  9.   

    打印出来的确有问题,怎样才能让@resultTable的值带上引号呢?