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