Это часть гораздо более крупной хранимой процедуры, но прежде чем я смогу перейти, я должен сначала разобрать XML, извлечь атрибуты и вставить их в таблицу temp. Затем я буду использовать эту таблицу для выполнения функций позже.Подзапрос возвратил более 1 значения со вставкой из XML
Когда я пытаюсь вставить в таблицу temp, я получаю «Подзапрос возвращает более 1 значения». Если мой фиктивный XML содержит один узел, он отлично работает, но если я добавлю дополнительные проблемы с узлами, придумайте.
Полного SQL, включая XML для проверки:
DECLARE @MESSAGELIST XML
set @MESSAGELIST =
'<object>
<Record FirstName = ''Red'' LastName = ''Shark'' Email = ''[email protected]'' Date = ''01/01/2001'' ></Record>
<Record FirstName = ''Jon'' LastName = ''Slow'' Email = ''[email protected]'' Date = ''01/01/2011'' ></Record>
<Record FirstName = ''Tyrone'' LastName = ''Lennystar'' Email = ''[email protected]'' Date = ''01/11/2011'' ></Record>
</object>'
IF (OBJECT_ID('tempdb..#NHOMessagesTemp') IS NOT NULL)
DROP TABLE #NHOMessagesTemp
CREATE TABLE #NHOMessagesTemp
(
FirstName nvarchar(50),
LastName nvarchar(50),
Email nvarchar(100),
MessageDate datetime
)
INSERT INTO #NHOMessagesTemp
VALUES (
(SELECT I.FirstName.value('@FirstName', 'nvarchar(50)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(FirstName)),
(SELECT I.LastName.value('@LastName', 'nvarchar(50)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(LastName)),
(SELECT I.Email.value('@Email', 'nvarchar(100)')
FROM @MESSAGELIST.nodes('/object/Record') AS I(Email)),
(SELECT I.[Date].value('@Date', 'datetime')
FROM @MESSAGELIST.nodes('/object/Record') AS I([Date]))
)
SELECT *
FROM #NHOMessagesTemp
Я уверен, что проблема с моим
FROM @MESSAGELIST.nodes('/object/Record') AS...
, но я не знаю, как в петлю через XML и получить все значения.
Благодарим за помощь!
Вместо того чтобы использовать 'VALUES' вставить, почему дон» Вы используете регулярный оператор выбора? например 'SELECT ABvalue ('@ FirstName', 'nvarchar (50)') FirstName, ABvalue ('@ LastName', 'nvarchar (50)') LastName, ABvalue ('@ Email', 'nvarchar (100)') Email, ABvalue ('@ Date', 'datetime') [Date] FROM @ MESSAGELIST.nodes ('/ object/Record') A (B) ' – ZLK
@ZLK, который должен быть ответом, который я думаю ... И здесь связанный вопрос для OP: [SQL Insert into ... values (SELECT ... FROM ...)] (http://stackoverflow.com/questions/25969/sql-insert-into-values-select-from) – har07
@ZLK, что есть точно, что я закончил делать, я видел ответ marc_s перед вашим. Я использовал ключевое слово «values» только на основе предыдущего опыта. Спасибо за ваш вклад! – DMcC