倒!
我问的是存储过程里面的SET ARITHABORT ON这句为什么没有作用?

解决方案 »

  1.   

    select @id=scope_identity()这句在这个问题里面无意义,其实可以忽略它的..
      

  2.   

    当在计算列或索引视图上创建和操作索引时,必须将 SET 选项 ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING 和 ANSI_WARNINGS 设置为 ON。必须将选项 NUMERIC_ROUNDABORT 设置为 OFF。 
    如果这些选项中的任何一个没有设置为所要求的值,则在索引视图上或在计算列带索引的表上进行的 INSERT、UPDATE 和 DELETE 操作将失败。SQL Server 将发出一个错误,列出所有设置不正确的选项。同时,SQL Server 将在这些表或索引视图上处理 SELECT 语句,仿佛计算列或视图上不存在索引一样。
      

  3.   

    没有问题啊。
    可能Test表有问题?
    表结构拿出来看看呢
      

  4.   

    删除存储过程,然后在查询分析器中执行下述语句创建:SET ARITHABORT ON
    go
    create proc p_insertTest
    (
           @fd1 nvarchar(10),
           @fd2 int,
           @fd3 int,
           @id int output
    )
    as
    begin
           insert into Test(fd1,fd2,fd3) VALUES(@fd1,@fd2,@fd3)
           select @id=scope_identity()
    end
      

  5.   

    重新创建存储过程测试的那段还是不能成功执行。
    我希望的是这个存储过程不论外部的环境设置怎样都可以执行成功,
    但是存储过程内部的SET好像并没有起到作用?
    在exec p_insertTest 'aaaaabbb',0,1,@ID output前有SET ARITHABORT OFF就会出错,没有就不会出错,也就是说p_insertTest体内的SET ARITHABORT ON这句没有起到它应该的作用。这是为什么?
      

  6.   

    當 SET ARITHABORT 設定為 OFF 時,如果 INSERT、DELETE 或 UPDATE 陳述式在運算式驗算時遇到算數錯誤 (溢位、除以零或值域錯誤),SQL Server 會插入或更新 NULL 值。如果目標資料行並非 NULL,則插入或更新動作會失敗,使用者會收到錯誤。如果 SET ARITHABORT 或是 SET ARITHIGNORE 設定為 OFF 且 SET ANSI_WARNINGS 設定為 ON 時,當 SQL Server 遇到除以零或溢位錯誤時,仍然會傳回錯誤訊息。SET ARITHABORT 的設定是在執行或執行時期設定,而不是在剖析時期設定。
      

  7.   

    摘自幫助文件
    SET ARITHABORT
    查詢執行過程中發生溢位或除以零的錯誤時終止查詢。語法
    SET ARITHABORT { ON | OFF }備註
    如果 SET ARITHABORT 設定為 ON 時,這些錯誤狀況將造成查詢或批次結束。如果錯誤發生於交易中,該交易將復原。如果 SET ARITHABORT 設定為 OFF 且發生這些錯誤時,將顯示警告訊息並將算數運算結果設定為 NULL。附註  如果 SET ARITHABORT 及 SET ARITHIGNORE 都沒有設定時,Microsoft™ SQL Server® 將傳回 NULL,並在查詢執行後傳回警告訊息。
    當 SET ARITHABORT 設定為 OFF 時,如果 INSERT、DELETE 或 UPDATE 陳述式在運算式驗算時遇到算數錯誤 (溢位、除以零或值域錯誤),SQL Server 會插入或更新 NULL 值。如果目標資料行並非 NULL,則插入或更新動作會失敗,使用者會收到錯誤。如果 SET ARITHABORT 或是 SET ARITHIGNORE 設定為 OFF 且 SET ANSI_WARNINGS 設定為 ON 時,當 SQL Server 遇到除以零或溢位錯誤時,仍然會傳回錯誤訊息。SET ARITHABORT 的設定是在執行或執行時期設定,而不是在剖析時期設定。建立或操作計算資料行索引或索引檢視表時,SET ARITHABORT 必須設定為 ON。如果 SET ARITHABORT 設定為 OFF,在具有計算資料行索引的資料表或索引檢視表中執行 CREATE、UPDATE、INSERT 及 DELETE 陳述式將發生錯誤。如需更多有關使用索引檢視表和計算資料行索引進行 SET 必要選項設定的詳細資訊,請參閱在 SET 中的〈使用 SET 陳述式的注意事項〉。
      

  8.   

    所以試以下exec p_insertTest 'abbb',0,1,@ID output看看還出不出錯