当前位置: 代码迷 >> Sql Server >> 存储过程报错解决思路
  详细解决方案

存储过程报错解决思路

热度:38   发布时间:2016-04-24 09:55:33.0
存储过程报错
create proc GetRowCount
 @tableName nvarchar(20),
 @rowCount int output
 as 
 begin
 declare @sql nvarchar(200);
 set @sql= 'select '+ @rowCount+'=COUNT(*) from '+ @tableName;
 exec(@sql); 
 end


执行这个存储过程会报错什么原因  ?怎么修改
消息 245,级别 16,状态 1,过程 GetRowCount,第 7 行
在将 varchar 值 'select ' 转换成数据类型 int 时失败。
------解决思路----------------------
create proc GetRowCount
 @tableName nvarchar(20),
 @rowCount int output
 as 
 begin 
 declare @sql nvarchar(200);
 set @sql= 'select  @rowCount=COUNT(*) from '+ @tableName;
 exec sp_executesql @sql,N'@tableName nvarchar(20),@rowCount int output',@tableName,@rowCount output
 select @rowCount
 --exec(@sql); 
 end

應該使用sp_executesql
------解决思路----------------------
你这个报错是因为
'select '+ @rowCount+'=COUNT(*) from '+ @tableName 因为@rowcount 是Int 会把SELECT转换成INT 出错。
加个convert(varchar(10),@rowcount) 就能编译通过。但是还是不能达到你的需求。要返回带返回值的动态SQL 必须用sp_executesql
------解决思路----------------------

 alter proc GetRowCount
 @tableName nvarchar(20),
 @rowCount int output
 as 
 begin
 declare @sql nvarchar(200);
 set @sql= 'select   @count =COUNT(*) from '+ @tableName;
 exec sp_executesql @sql,N'@count int output',@rowcount output
 end

 
 --declare @rowcount int
 --exec GetRowCount N'test',@rowcount output
 --select @rowcount
  相关解决方案