XML 문자열에서 데이터를 제거하고이를 테이블 변수에 삽입하고 쿼리하여 다른 테이블에 데이터를 삽입합니다. 그것은 내 localhost 환경에서 매력처럼 실행되지만 내 프로덕션 SQL Server 데이터베이스에서는 실행되지 않습니다. "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에서 저장 프로 시저를 직접 실행 해 보았습니다. 내 응용 프로그램에서 데이터를 전송할 때 데이터가 같지 않고 동일한 데이터입니다. –
응용 프로그램이 ARITHABORT를 OFF로 설정하고 있음을 의미합니다. –
고마워, 나는 마침내 알리자뱅을 적절한 장소에 두지 않았다는 것을 알게되었다. 그것은 이전에 시도했던 것처럼 NOCOUNT에 가까운 sproc 안에 들어가야합니다. Abraços. –