Foxtable(狐表)用户栏目专家坐堂 → 储存过程使用的全局临时表,前端调用总提示错误


  共有1252人关注过本帖平板打印复制链接

主题:储存过程使用的全局临时表,前端调用总提示错误

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1907 积分:16954 威望:0 精华:0 注册:2014/7/29 19:09:00
储存过程使用的全局临时表,前端调用总提示错误  发帖心情 Post By:2023/5/16 9:47:00 [只看该作者]

储存过程如下:
--计算各面板任务记录数
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 值。


谢谢!

 回到顶部