以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  储存过程中的错误如何返回到前面来  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=120717)

--  作者:happyft
--  发布时间: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()
谢谢!

--  作者:有点甜
--  发布时间: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
--  发布时间: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;
这样写那个视图名也显示不出来,应该怎么写?


--  作者:有点甜
--  发布时间:2018/6/22 16:51:00
--  

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

 

RAISERROR(\'aaabbbccc\',16,1)

 

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