Usar XML en columnas calculadas

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Pueden aparecer instancias XML como origen de una columna calculada o como un tipo de columna calculada. Los ejemplos de este artículo muestran cómo usar XML con columnas calculadas.

Crear columnas calculadas a partir de columnas XML

En la siguiente instrucción CREATE TABLE, una columna de tipo xml (col2) se calcula a partir de col1:

CREATE TABLE T ( col1 varchar(max), col2 AS CAST(col1 AS xml) );

El tipo de datos xml también puede aparecer como origen en la creación de una columna calculada, tal como se muestra en la siguiente instrucción CREATE TABLE:

CREATE TABLE T ( col1 xml, col2 as cast(col1 as varchar(1000) ));

Puede crear una columna calculada extrayendo un valor de una columna de tipo xml, como se muestra en el ejemplo siguiente. Puesto que los métodos de tipo de datos xml no se pueden usar directamente en la creación de columnas calculadas, en el ejemplo se define en primer lugar una función (my_udf) que devuelve un valor de una instancia XML. La función ajusta el método value() del tipo xml . A continuación se especifica el nombre de la función en la instrucción CREATE TABLE para la columna calculada.

Nota:

Si desea crear una columna calculada persistente basada en esta función, la propia función debe ser determinista. Para más información, vea Funciones deterministas y no deterministas.

CREATE FUNCTION my_udf(@var xml) returns int
AS BEGIN
RETURN @var.value('(/ProductDescription/@ProductModelID)[1]' , 'int')
END;
GO
-- Use the function in CREATE TABLE.
CREATE TABLE T (col1 xml, col2 as dbo.my_udf(col1) );
GO
-- Try adding a row.
INSERT INTO T values('<ProductDescription ProductModelID="1" />');
GO
-- Verify results.
SELECT col2, col1
FROM T;

Al igual que en el ejemplo anterior, en el siguiente se define una función para devolver una instancia de tipo xml para una columna calculada. En la función, el método query() del tipo de datos xml recupera un valor de un parámetro de tipo xml.

CREATE FUNCTION my_udf(@var xml)
  RETURNS xml AS
BEGIN
   RETURN @var.query('ProductDescription/Features')
END;

En la siguiente instrucción CREATE TABLE, Col2 es una columna calculada que usa los datos XML (elemento <Features>) devueltos por la función:

CREATE TABLE T (Col1 xml, Col2 as dbo.my_udf(Col1) );
-- Insert a row in table T.
INSERT INTO T VALUES('
<ProductDescription ProductModelID="1" >
  <Features>
    <Feature1>description</Feature1>
    <Feature2>description</Feature2>
  </Features>
</ProductDescription>');
-- Verify the results.
SELECT *
FROM T;

Consulte también