zoukankan      html  css  js  c++  java
  • SQL 书籍推荐(示例SQL 错误处理)

    看过很多SQL入门的书籍, 最值得推荐的还是《MICROSOFT+SQL+SERVER+2008技术内幕:T-SQL语言基础》

    看完上面那本, 并且在工作中实践了之后, 可以继续看《Microsoft SQL Server 2008技术内幕:T-SQL查询》

    和另外一本《Inside_Microsoft_SQL_Server_2008_T-SQL_Programming 》,这本暂时没中文版。

    下面是摘抄自本书的关于SQL错误处理的相关内容。

    CREATE TABLE dbo.Employees
    (
    	empid INT NOT NULL,
    	empname VARCHAR(25) NOT NULL,
    	mgrid INT NULL,
    	CONSTRAINT PK_Employees PRIMARY KEY(empid),
    	CONSTRAINT CHK_Employees_empid CHECK(empid>0),
    	CONSTRAINT FK_Employees
    		FOREIGN KEY(mgrid) REFERENCES dbo.Employees(empid)
    )
    
    
    BEGIN TRY
    
    	INSERT INTO dbo.Employees ( empid, empname, mgrid )
    	VALUES  ( 1, 'emp1', NULL  );
    END TRY
    BEGIN CATCH
    	IF ERROR_NUMBER()=2627
    		PRINT '		Handling PK violation...';
    	ELSE IF ERROR_NUMBER()=547
    		PRINT '		Handling Check/FK constraint violation...';
    	ELSE IF ERROR_NUMBER()=515
    		PRINT '		Handling Null violation...';
    	ELSE IF ERROR_NUMBER()=245
    		PRINT '		Handling conversion error...';
    	ELSE
    		PRINT '		Handling Unknow error...';
    
    	PRINT	'ERROR Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
    	PRINT	'ERROR Message:' + ERROR_MESSAGE();
    	PRINT	'ERROR SEVERITY:' + CAST (ERROR_SEVERITY() AS VARCHAR(10));
    	PRINT	'ERROR State: '+ CAST(ERROR_STATE() AS VARCHAR(10));
    	PRINT	'ERROR LINE:'+ CAST (ERROR_LINE() AS VARCHAR(10));
    	PRINT	'ERROR PROC:' + COALESCE(ERROR_PROCEDURE(),'Not within proc');
    
    END CATCH;
    
    /*
    	当第二次运行上面这段代码时,INSERT 语句将会失败, 流程控制转移到CATCH块,会有以下的错误信息。
    	要查看其它错误的效果,可以用0,'A', NULL作为雇员ID来运行这段代码。
    
    (0 行受影响)
    		Handling PK violation...
    ERROR Number:2627
    ERROR Message:违反了 PRIMARY KEY 约束“PK_Employees”。不能在对象“dbo.Employees”中插入重复键。重复键值为 (1)。
    ERROR SEVERITY:14
    ERROR State: 1
    ERROR LINE:5
    ERROR PROC:Not within proc
    
    */
    	
    
    IF OBJECT_ID('dbo.ups_use_err_message','P') IS NOT NULL
    	DROP PROC dbo.ups_use_err_message;
    GO
    
    CREATE PROC dbo.ups_user_err_message
    AS
    
    	IF ERROR_NUMBER()=2627
    		PRINT '		Handling PK violation...';
    	ELSE IF ERROR_NUMBER()=547
    		PRINT '		Handling Check/FK constraint violation...';
    	ELSE IF ERROR_NUMBER()=515
    		PRINT '		Handling Null violation...';
    	ELSE IF ERROR_NUMBER()=245
    		PRINT '		Handling conversion error...';
    	ELSE
    		PRINT '		Handling Unknow error...';
    
    	PRINT	'ERROR Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
    	PRINT	'ERROR Message:' + ERROR_MESSAGE();
    	PRINT	'ERROR SEVERITY:' + CAST (ERROR_SEVERITY() AS VARCHAR(10));
    	PRINT	'ERROR State: '+ CAST(ERROR_STATE() AS VARCHAR(10));
    	PRINT	'ERROR LINE:'+ CAST (ERROR_LINE() AS VARCHAR(10));
    	PRINT	'ERROR PROC:' + COALESCE(ERROR_PROCEDURE(),'Not within proc');
    
    GO
    
    /*  
    	现在上面的测试就可以直接调用处理错误的存储过程来处理了。
    */
    
    BEGIN TRY
    
    	INSERT INTO dbo.Employees ( empid, empname, mgrid )
    	VALUES  ( 1, 'emp1', NULL  );
    END TRY
    BEGIN CATCH
    	EXEC dbo.ups_user_err_message
    
    END CATCH;
    
    /*
      这样处理, 就可以只在数据库的一个地方对可重用的错误处理代码进行维护。
    */
    --DROP TABLE dbo.Employees

      

  • 相关阅读:
    VisualVM 分析full GC问题记录
    HTTPS协议、TLS协议、证书认证过程解析
    java.lang基础数据类型boolean、char、byte、short、int、long、float、double (JDK1.8)
    java.lang.StringBuilder和java.lang.StringBuffer (JDK1.8)
    MVC中自带的异步((Ajax.BeginForm)无效
    百度富文本编辑器UEDITOR
    只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 // 节中包括 System.Web.SessionSta
    【知识碎片】CSS 篇
    js 将json字符串转换为json对象的方法解析
    【知识碎片】Asp.Net 篇
  • 原文地址:https://www.cnblogs.com/intheway/p/6795752.html
Copyright © 2011-2022 走看看