日期:2014-05-18  浏览次数:20495 次

为什么我的SQL语句没有执行啊,头疼了两三天了!!!!!!!!!!!!!!
SQL code

CREATE PROCEDURE Fr_add
(
     @userid  INT,
     @username NVARCHAR(50),
     @fid  INT,
     @fname NVARCHAR(50),
     @result char(10) output
)
AS
declare @fid1 varchar(2000),@sql1 varchar(4000)
select @fid1=FId from MymyUsers where UserId=@fid
set @sql1 = 'if '+cast(@userid as varchar(10))+' not in ('+@fid1+') 
begin UPDATE MymyUsers SET FId=FId+,+'+CAST(@userid AS VARCHAR(20))+',FName=FName+,+'+@username+' where UserId='
+cast(@fid as varchar(20))+' select'+@result+'=1 end else begin select '+@result+'=3 end '
EXEC (@sql1)
GO


为什么我的存储过程里这个EXEC (@sql1)不执行,不起作用的呢??????

------解决方案--------------------
CREATE PROCEDURE Fr_add
(
@userid INT,
@username NVARCHAR(50),
@fid INT,
@fname NVARCHAR(50),
@result char(10) output
)
AS
declare @fid1 varchar(2000),@sql1 varchar(4000)
select @fid1=FId from MymyUsers where UserId=@fid
set @sql1 = 'if '''+cast(@userid as varchar(10))+''' not in ('''+@fid1+''') 
begin UPDATE MymyUsers SET FId=FId+,+'''+CAST(@userid AS VARCHAR(20))+''',FName=FName+,+'''+@username+''' where UserId='''
+cast(@fid as varchar(20))+''' select'+@result+'=1 end else begin select '+@result+'=3 end '
EXEC (@sql1)
GO
你在转换时出错了,应当是3个点 +'''+cast(@userid as varchar(10))+'''
在测试时 把EXEC (@sql1) 换成 print
执行的结里粘出来 在分析器中执行一下。看看对不对!
------解决方案--------------------
如果@result 没有付值就传进去了,会把@sql1 整个变成null
你的@sql1 拼接结果惨不忍睹,根本无法运行
@result output参数毫无意义,你没有在过程内对他做过任何改动
------解决方案--------------------
在sql查询分析中运行
SQL code
print ''''

------解决方案--------------------
@result output该怎么处理
=======
输出参数代表传参的时候这个参数没有值,但在函数(本例是存储过程)内得到值

就楼主这个例子,你得自己先想明白,你打算传递个什么样的result呢?