Ошибка в запросе с типом данных XML - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть запрос, который удаляет данные из строки XML, вставляет их в переменную таблицы и запрашивает их для вставки данных в другую таблицу. Это работает как моя прелесть в моей локальной среде, но не в моей производственной базе данных 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

Спасибо!

1 Ответ

1 голос
/ 16 сентября 2009

Тип данных XML требует, чтобы определенные параметры SET были установлены определенным образом. См. Параметры настройки (тип данных xml) . В частности, ARITHABORT должно быть ON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...