Foxtable(狐表)用户栏目专家坐堂 → 储存过程中的错误如何返回到前面来


  共有2262人关注过本帖树形打印复制链接

主题:储存过程中的错误如何返回到前面来

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17576 威望:0 精华:0 注册:2014/7/29 19:09:00
储存过程中的错误如何返回到前面来  发帖心情 Post By:2018/6/22 14:16:00 [只看该作者]

更改了表结构后要刷新下所有视图,看看是否有错,
储存过程中遍历每个视图时
ALTER PROCEDURE [dbo].[usp_RefreshAllView]
AS
    DECLARE MyCursor CURSOR
    FOR
    SE LECT name
    FROM dbo.sysobjects
    WHERE OBJECTPROPERTY(id, N'IsView') = 1
          AND (NOT name IN ( 'sysconstraints', 'syssegments' ));

    DECLARE @name VARCHAR(40);
    OPEN MyCursor;

    FETCH NEXT FROM MyCursor
    INTO @name;
    WHILE (@@fetch_status <> -1)
    BEGIN
        IF (@@fetch_status <> -2)
        BEGIN
            PRINT @name; --输出表名出错时方便查看
            EXEC sp_refreshview @name;
        END;
        FETCH NEXT FROM MyCursor
        INTO @name;
    END;

    CLOSE MyCursor;
    DEALLOCATE MyCursor;

在sql中加入红色的部分执行出错时就知道是哪个视图的错

图片点击可在新窗口打开查看此主题相关图片如下:视图.jpg
图片点击可在新窗口打开查看

但如果在ft的界面通过按钮执行储存过程时出错只显示错误,要如何返回这个出错的视图名称呢
ft中按钮事件代码
Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandText = "Exec usp_RefreshAllView"  
cmd.ExecuteNonQuery()
谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/22 14:54:00 [只看该作者]

方法一:Raiserror弹出错误

 

https://www.baidu.com/baidu?wd=sqlserver+Raiserror

 

方法二:用另一种方法调用存储过程,返回数据

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=120425&skin=0

 


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17576 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/6/22 16:10:00 [只看该作者]

第一种方法在储存过程中怎么用?网上看半天没懂
 BEGIN
     -- PRINT @name; --输出表名出错时方便查看
     EXEC sp_refreshview @name;

     DECLARE @error_mes VARCHAR(1000);
     DECLARE @error_obj VARCHAR(1000);
     SE LECT @error_obj = @name;
     SET @error_mes = @name + ' 刷新视图时出错';
     RAISERROR(@error_mes, 16, 1, @error_obj);
 END;
这样写那个视图名也显示不出来,应该怎么写?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/22 16:51:00 [只看该作者]

在你的存储过程中,try catch,如果有错,直接抛出错误,即可

 

RAISERROR('aaabbbccc',16,1)

 

foxtable里面,同样用try catch捕捉错误。


 回到顶部