日期:2014-05-17  浏览次数:20485 次

存储过程求助,无法插入

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"。

------最佳解决方案--------------------
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)

------其他解决方案--------------------
你先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)
 
------其他解决方案--------------------

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

------其他解决方案--------------------
exec先最好先print出来看字串,放到查询分析器里一看就知道问题所在
------其他解决方案--------------------