读书人

存储过程无法插入

发布时间: 2012-12-22 12:05:07 作者: rapoo

存储过程求助,无法插入


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出来看字串,放到查询分析器里一看就知道问题所在
------其他解决方案--------------------


哦,resultTable不小心改错了。问题是,无法执行更新操作!
[其他解释]
不懂 貌似 没有 insert into select update 这样的语句吧 要不 你先插入 再更新吧
[其他解释]
exec (@str)

换成exec sp_executesql @str

试试
[其他解释]
最后一个@resulTable 少些一个t
@resultTable
[其他解释]
打印出来的确有问题,怎样才能让@resultTable的值带上引号呢?
[其他解释]

引用:
SQL code?12345678910111213141516171819ALTER PROCEDURE [dbo].[CreateResult] @UserName varchar(50), @TableName varchar(255),--表名 @StrWhere nvarchar(1000)='' , --查询条件 @resultTabl……

正解
[其他解释]
谢谢给位大侠的热新帮助拉!

读书人网 >SQL Server

热点推荐