2009-09-15 87 views
0

我有一個查詢從XML字符串中刪除數據,將其插入到表變量中並查詢它將數據插入到另一個表中。它在我的localhost環境中像一個魅力一樣運行,但不在我的生產SQL Server數據庫中運行。錯誤消息是「插入失敗,因爲以下SET選項具有不正確的設置:'ARITHABORT'。驗證SET選項是否適用於計算列和/或查詢通知和/或xml數據類型方法上的索引視圖和/或索引''使用XML數據類型查詢時出錯

我認爲它與我的XML數據有關。我的XML數據按照原樣讀取,無類型。

我會很感激任何幫助。它可能與某些數據庫設置有關,或者我必須在查詢中改進以達到更好的標準。

這裏是一塊數據的一個例子,我想插入:

<data><dataitem evaluateduserid="208" idcompetencylevel="90" /><dataitem evaluateduserid="211" idcompetencylevel="89" /><dataitem evaluateduserid="205" idcompetencylevel="90" /></data> 

這裏是我的查詢:

ALTER PROC [dbo].[Spel_CM_AssessmentsDataInsertEventItem] 
    @IdAssessmentEventItem int, 
    @UserCompetencyLevel xml 
AS 
SET NOCOUNT ON 

-- XML Data model: 
-- <data> 
-- <dataitem evaluateduserid="x" idcompetencylevel="y"></dataitem> 
--</data> 

DECLARE @TableUserCompetencyLevel table 
(
    EvaluatedUserId int, 
    IdCompetencyLevel int 
) 

INSERT INTO 
    @TableUserCompetencyLevel 
    (
     EvaluatedUserId, 
     IdCompetencyLevel 
    ) 
SELECT 
    EvaluatedUserId = aa.Item.value('@evaluateduserid', 'int'), 
    IdCompetencyLevel = aa.Item.value('@idcompetencylevel', 'int') 
FROM 
    @UserCompetencyLevel.nodes('data/dataitem') AS aa(Item) 


-- Delete previously existing data. This is useful in case the user is 
-- updating an assessment event item 
DELETE FROM 
    Spel_CM_AssessmentsData 
WHERE 
    IdAssessmentEventItem = @IdAssessmentEventItem 

-- Preparing to insert data... 
DECLARE @IdAssessmentEvent int 
SELECT @IdAssessmentEvent = da.[IdAssessmentEvent] FROM Spel_CM_AssessmentsEventsItems da WHERE da.[IdAssessmentEventItem] = @IdAssessmentEventItem 


-- Inserts data into AssessmentsData table 
INSERT INTO Spel_CM_AssessmentsData 
(
    [IdAssessmentEvent], 
    [IdAssessmentEventItem], 
    [EvalatedUserId], 
    [IdCompetencyLevel] 
) 

SELECT 
    @IdAssessmentEvent, 
    @IdAssessmentEventItem, 
    ca.[EvaluatedUserId], 
    ca.[IdCompetencyLevel] 
FROM 
    @TableUserCompetencyLevel ca 
WHERE 
    (NOT ca.[EvaluatedUserId] IS NULL) 
    AND 
    ((NOT ca.[IdCompetencyLevel] IS NULL) AND (NOT ca.[IdCompetencyLevel] = '')) 

-- Updates the AssessmentsEventsItems table to confirm that the items have been inserted 
EXECUTE Spel_CM_AssessmentsEventsItemsUpdate @IdAssessmentEventItem, 1 


SET NOCOUNT OFF 

謝謝!

回答

1

XML數據類型需要以某種方式設置某些SET選項。見Setting Options (xml Data Type)。具體而言,ARITHABORT必須是ON

+0

謝謝,但是當我設置ARITHABORT時它不起作用。我剛剛嘗試直接從SQL Management Studio運行STORED PROCEDURE,它可以正常工作。當我的應用程序發送數據時,它不會和它是相同的數據... – 2009-09-15 23:16:12

+0

這意味着您的應用程序正在設置ARITHABORT OFF。 – 2009-09-15 23:21:01

+0

謝謝,我終於發現我沒有把ARITHABORT放在正確的地方。它應該進入貼片內部,靠近NOCOUNT,而不是像之前我嘗試過的那樣。 Abraços。 – 2009-09-16 12:50:42