我有一个查询从XML字符串中删除数据,将其插入表变量并查询它以将数据插入另一个表中。它在我的localhost环境中像魅力一样运行,但在我的生产SQL Server数据库中运行。错误消息是“INSERT失败,因为以下SET选项具有不正确的设置:'ARITHABORT'。验证SET选项是否正确用于索引视图和/或计算列和/或查询通知和/或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
谢谢!