--计算各面板任务记录数
ALTER PROCEDURE [dbo].[usp_alert20]
(
@Rotype INT ,
@RoleAll NVARCHAR(800) ,
@RoleSwtx NVARCHAR(800) ,
@count INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..##temp1') IS NOT NULL
DROP TABLE ##temp1;
IF OBJECT_ID('tempdb..##temp2') IS NOT NULL
DROP TABLE ##temp2;
DECLARE @sql2 NVARCHAR(MAX);
IF @Rotype = 1 --系统管理员加载事务提醒中所有数据
BEGIN
--将数据存入临时表
SET @sql2 = '
SELECT a.*
INTO ##temp1
FROM ( SELECT a.* ,
b.Fname AS 流程名称
FROM dbo.事务提醒 a
LEFT JOIN dbo.ftbSet b ON a.单据名称 = b.tbN
AND a.sys_Fbh = b.Fid
) a';
EXEC sp_executesql @sql2;
--查询返回可处理记录数
SELECT @count = COUNT(*)
FROM ##temp1;
END;
ELSE
IF @Rotype = 2
BEGIN
--将用户有权处理的表单及流程存入全局临时表
SET @sql2 = '
SELECT a.*
INTO ##temp2
FROM (
SELECT tbN,Fid
FROM ftbSet
WHERE sqRole like ' + @RoleAll
+ ') a
--将事务提醒中用户有权处理的数据存入临时表
SELECT a.*
INTO ##temp1
FROM ( SELECT a.* ,
b.Fname AS 流程名称
FROM dbo.事务提醒 a
LEFT JOIN dbo.ftbSet b ON a.单据名称 = b.tbN
AND a.sys_Fbh = b.Fid
WHERE EXISTS ( SELECT *
FROM ##temp2 c
WHERE c.tbN = a.单据名称
AND c.Fid = a.sys_Fbh )
AND (a.接收人 = ''自动导入'' OR a.接收人 LIKE '
+ @RoleSwtx + ')
) a ';
EXEC sp_executesql @sql2;
--查询返回可处理记录数
SELECT @count = COUNT(*)
FROM ##temp1;
END;
SET NOCOUNT OFF;
END;
ft前端调用
'计算用户可处理的待处理记录数
Dim cmd As new SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandText = "Exec usp_alert20 ?,?,?,? output"
cmd.Parameters.Add("@角色类型",Rotype) '输入参数
cmd.Parameters.Add("@所有角色",Role_All) '输入参数
cmd.Parameters.Add("@事务角色",Role_swtx) '输入参数
cmd.Parameters.Add("@返回值", 0, True) '输出参数
cmd.ExecuteNonQuery
count = cmd.Parameters("@返回值")
pg.text = pg.name & "(" & count & ")"
出错提示:
NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:
详细错误信息:
对象名 '##temp1' 无效。
提供程序无法确定 Int32
值。例如,该行刚刚创建,未提供 Int32 列的默认值,并且使用者尚未设置新 Int32 值。
谢谢!