ALTER PROCEDURE [dbo].[P_Page_v3]
@PCount int , --请求页数
@PageSize int, --页大小
@Table nvarchar(100), --查询表名
@Fields nvarchar(500), --查询字段
@Where nvarchar(500), --查询条件
@Order nvarchar(100) --排序字段
AS
begin
declare @i int,@px int,@py int
declare @pMax int,@sql nvarchar(2000)
--总记录数
set @sql='(select count(1) from '+@Table+')';
set @i=exec(@sql) <-- 这里有问题!!
print @i;
alter PROCEDURE [dbo].[P_Page_v5]
@Table nvarchar(100) --查询表名
AS
begin
declare @i int,@px int,@py int
declare @pMax int,@sql nvarchar(2000)
set @table='drugs_account'
--总记录数
set @sql='select @i=count(1) from '+@Table+''
print @sql
exec sp_executesql @sql, N'@i int out,@Table nvarchar(100)', @i out, @Table
select @i
end
sql 过程这个怎么写,要把@sql执行结果赋值给@i。
答案:2 悬赏:60 手机版
解决时间 2021-03-14 14:47
- 提问者网友:呐年旧曙光
- 2021-03-13 16:58
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-03-13 17:06
1、这个语法是错误的。
2、也不能用:SET @sql = N'SELECT @i = COUNT(1) ...',
- 因为@sql是一个完整的执行体,@i必须在其中定义。
- 定义在其中也不行,因为传递不出来
3、可行的方法:
A)使用中间表来过渡
- 虽然@sql是动态的,但是可以将结果保存到中间表中
- 中间表是固定的,因此EXEC()完后,立即访问该表,可以得到数据,从而传递出来
B)使用sp_ExecuteSQL --推荐
EXEC sp_ExecuteSQL @sql, @ParamsDefinition, @Param1, @Param2...
2、也不能用:SET @sql = N'SELECT @i = COUNT(1) ...',
- 因为@sql是一个完整的执行体,@i必须在其中定义。
- 定义在其中也不行,因为传递不出来
3、可行的方法:
A)使用中间表来过渡
- 虽然@sql是动态的,但是可以将结果保存到中间表中
- 中间表是固定的,因此EXEC()完后,立即访问该表,可以得到数据,从而传递出来
B)使用sp_ExecuteSQL --推荐
EXEC sp_ExecuteSQL @sql, @ParamsDefinition, @Param1, @Param2...
全部回答
- 1楼网友:拾荒鲤
- 2021-03-13 18:17
我是来看评论的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯