У меня есть запрос, который удаляет данные из XML-строки, вставляет ее в переменную таблицы и запрашивает ее для вставки данных в другую таблицу. Он работает как очарование в моей локальной среде, но не в моей базе данных SQL Server. Сообщение об ошибке «INSERT не работает, потому что следующие параметры 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 ON. Я только что попробовал запустить STORED PROCEDURE непосредственно из SQL Management Studio и работает. Когда мое приложение отправляет данные, это не так, и это одни и те же данные ... –
Это означает, что ваше приложение устанавливает ARITHABORT OFF. –
Спасибо, я наконец узнал, что я не разместил ARITHABORT в нужном месте. Он должен попасть внутрь sproc, рядом с NOCOUNT, а не раньше, чем я пытался раньше. Abraços. –