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
謝謝!
謝謝,但是當我設置ARITHABORT時它不起作用。我剛剛嘗試直接從SQL Management Studio運行STORED PROCEDURE,它可以正常工作。當我的應用程序發送數據時,它不會和它是相同的數據... – 2009-09-15 23:16:12
這意味着您的應用程序正在設置ARITHABORT OFF。 – 2009-09-15 23:21:01
謝謝,我終於發現我沒有把ARITHABORT放在正確的地方。它應該進入貼片內部,靠近NOCOUNT,而不是像之前我嘗試過的那樣。 Abraços。 – 2009-09-16 12:50:42