Importar desde xml a columna de identidad
Intenté importar algunos datos de XML a una tabla temporal.
Mi código:
DECLARE @xmlData XML
SET @xmlData = '
<PersonsInfo>
<Person BussEntityId="1">
<Name>
<First>Ken</First>
<Middle>J</Middle>
<Last>Sánchez</Last>
</Name>
</Person>
<Person BussEntityId="2">
<Name>
<First>Terri</First>
<Middle>Lee</Middle>
<Last>Duffy</Last>
</Name>
</Person>
</PersonsInfo>'
CREATE TABLE #Person
(
PersonId int IDENTITY PRIMARY KEY,
FirstName varchar(20),
MiddleName varchar(20),
LastName varchar(20)
)
SET IDENTITY_INSERT #Person ON;
INSERT INTO #Person
SELECT
T.e.value('(@BussEntityId)[1]', 'int') AS PersonId,
P.elem.value('First[1]', 'varchar(20)') AS FirstName,
P.elem.value('Middle[1]', 'varchar(20)') AS MiddleName,
P.elem.value('Last[1]', 'varchar(20)') AS LastName
FROM
@xmlData.nodes('/PersonsInfo/Person') AS T(e)
OUTER APPLY
T.e.nodes('Name') AS P(elem)
SET IDENTITY_INSERT #Person OFF
SELECT * FROM #Person
DROP TABLE #Person
Me sale un error:
Un valor explícito para la columna de identidad en la tabla ‘#Person’ solo se puede especificar cuando se utiliza una lista de columnas y IDENTITY_INSERT está ON.
Establecí IDENTITY_INSERT
en ON, ¿por qué hay un problema?
davy.ai
El problema es que
IDENTITY_INSERT
permite insertar valores explícitos en una columna de identidad. Sin embargo, en el código proporcionado no se especifica una lista de columnas explícita en la declaraciónINSERT
, lo que provoca que se produzca el error.Para solucionar el error, la lista de columnas debe especificarse explícitamente, así:
Al especificar explícitamente la lista de columnas, SQL Server sabe que los valores proporcionados en la declaración
SELECT
son solo para las columnas correspondientes. Por lo tanto, permite queIDENTITY_INSERT
funcione según lo previsto.