Compartir vía


SELECT: cláusula FOR (Transact-SQL)

Se aplica a:Sql Server Azure SQL Database Azure SQL Instancia administrada punto de conexión de SQL Analytics en Microsoft Fabric Warehouse en la base de datos SQL de Microsoft Fabricen Microsoft Fabric

Use la cláusula FOR para especificar una de las siguientes opciones para los resultados de la consulta.

  • Permitir actualizaciones al ver los resultados de la consulta en un cursor en modo de exploración especificando FOR BROWSE.

  • Dar formato a los resultados de la consulta como XML especificando FOR XML.

  • Dar formato a los resultados de la consulta como JSON especificando FOR JSON.

Convenciones de sintaxis de Transact-SQL

Sintaxis

[ FOR { BROWSE | <XML> | <JSON>} ]  

<XML> ::=  
XML   
{   
    { RAW [ ( 'ElementName' ) ] | AUTO }   
    [   
        <CommonDirectivesForXML>   
        [ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]   
        [ , ELEMENTS [ XSINIL | ABSENT ]   
    ]  
  | EXPLICIT   
    [   
        <CommonDirectivesForXML>   
        [ , XMLDATA ]   
    ]  
  | PATH [ ( 'ElementName' ) ]   
    [  
        <CommonDirectivesForXML>   
        [ , ELEMENTS [ XSINIL | ABSENT ] ]  
    ]  
}   

<CommonDirectivesForXML> ::=   
[ , BINARY BASE64 ]  
[ , TYPE ]  
[ , ROOT [ ( 'RootName' ) ] ]  

<JSON> ::=  
JSON   
{   
    { AUTO | PATH }   
    [   
        [ , ROOT [ ( 'RootName' ) ] ]  
        [ , INCLUDE_NULL_VALUES ]  
        [ , WITHOUT_ARRAY_WRAPPER ]  
    ]  

}

FOR BROWSE

BROWSE

Especifica que se permiten las actualizaciones mientras se visualizan los datos en el cursor del modo de exploración de DB-Library. Una tabla se puede explorar en una aplicación si la tabla incluye una columna timestamp, la tabla tiene un índice único y la opción FOR BROWSE está al final de las instrucciones SELECT enviadas a una instancia de SQL Server.

Nota:

No se puede usar <lock_hint> HOLDLOCK en una instrucción SELECT que incluya la opción FOR BROWSE.

FOR BROWSE no puede aparecer en instrucciones SELECT combinadas mediante el operador UNION.

Nota:

Cuando las columnas de clave de índice único de una tabla pueden aceptar valores NULL, y la tabla está en la parte interna de la combinación externa, el índice no se admite en el modo de exploración.

El modo de exploración permite examinar las filas de la tabla de SQL Server y actualizar los datos de la tabla fila por fila. Para tener acceso a una tabla de SQL Server en una aplicación en el modo de exploración, debe usar una de las dos opciones siguientes:

  • La instrucción SELECT que usa para tener acceso a los datos de la tabla de SQL Server debe finalizar con las palabras clave FOR BROWSE. Al activar la opción FOR BROWSE para usar el modo de exploración, se crean tablas temporales.

  • Debe ejecutar la instrucción Transact-SQL siguiente para activar el modo de exploración mediante la opción NO_BROWSETABLE:

    SET NO_BROWSETABLE ON  
    

    Al activar la opción NO_BROWSETABLE, todas las instrucciones SELECT se comportan como si la opción FOR BROWSE se anexara a las instrucciones. Aun así, la opción NO_BROWSETABLE no crea las tablas temporales que la opción FOR BROWSE suele usar para enviar los resultados a la aplicación.

Cuando se intenta tener acceso a los datos de las tablas de SQL Server en modo de exploración mediante una consulta SELECT que implica una instrucción de combinación externa, y cuando se define un índice único en la tabla que está presente en el lado interno de una instrucción de combinación externa, el modo de exploración no admite el índice único. El modo de exploración solo admite el índice único cuando todas las columnas de clave de índice únicas pueden aceptar valores NULL. El modo de exploración no admite el índice único si se cumplen las condiciones siguientes:

  • Intenta tener acceso a los datos de las tablas de SQL Server en modo de exploración mediante una consulta SELECT que implica una instrucción de combinación externa.

  • Un índice único se define en la tabla que está presente en el lado interno de una instrucción de combinación externa.

Para reproducir este comportamiento en el modo de exploración, siga estos pasos:

  1. En SQL Server Management Studio, cree una base de datos denominada SampleDB.

  2. En la base de datos de SampleDB, cree una tabla de tleft y una tabla de tright que contengan una sola columna denominada c1. Defina un índice único en la columna c1 de la tabla tleft y establezca la columna para aceptar valores NULL. Para ello, ejecute las instrucciones Transact-SQL siguientes en una ventana de consulta adecuada:

    CREATE TABLE tleft(c1 INT NULL UNIQUE) ;  
    GO   
    CREATE TABLE tright(c1 INT NULL) ;  
    GO  
    
  3. Inserte varios valores en la tabla tleft y la tabla tright. Asegúrese de insertar un valor de NULL en la tabla tleft. Para ello, ejecute las instrucciones Transact-SQL siguientes en la ventana de consulta:

    INSERT INTO tleft VALUES(2) ;  
    INSERT INTO tleft VALUES(NULL) ;  
    INSERT INTO tright VALUES(1) ;  
    INSERT INTO tright VALUES(3) ;  
    INSERT INTO tright VALUES(NULL) ;  
    GO  
    
  4. Active la opción NO_BROWSETABLE. Para ello, ejecute las instrucciones Transact-SQL siguientes en la ventana de consulta:

    SET NO_BROWSETABLE ON ;  
    GO  
    
  5. Acceda a los datos de la tabla tleft y la tabla tright mediante una instrucción de combinación externa en la consulta SELECT. Asegúrese de que la tabla tleft está en el lado interno de la instrucción de combinación externa. Para ello, ejecute las instrucciones Transact-SQL siguientes en la ventana de consulta:

    SELECT tleft.c1   
    FROM tleft   
    RIGHT JOIN tright   
    ON tleft.c1 = tright.c1   
    WHERE tright.c1 <> 2 ;
    

    Observe la siguiente salida en el panel Resultados de:

    c1  
    ---
    NULL  
    NULL  
    

Después de ejecutar la consulta de SELECT para tener acceso a las tablas en el modo de exploración, el conjunto de resultados de la consulta de SELECT contiene dos valores NULL para la columna c1 de la tabla tleft debido a la definición de la instrucción de combinación externa derecha. Por lo tanto, en el conjunto de resultados, no se puede distinguir entre los valores de NULL procedentes de la tabla y los valores de NULL que introdujo la instrucción de combinación externa derecha. Es posible que reciba resultados incorrectos si debe omitir los valores de NULL del conjunto de resultados.

Nota:

Si las columnas incluidas en el índice único no aceptan valores NULL, todas las NULL valores del conjunto de resultados se introdujeron mediante la instrucción de combinación externa derecha.

FOR XML

XML

Especifica que el resultado de una consulta se devolverá como documento XML. Se debe especificar uno de los siguientes modos XML: RAW, AUTO, EXPLICIT. Para más información sobre los datos XML y SQL Server, vea FOR XML (SQL Server).

RAW [ ('ElementName') ]

Toma el resultado de la consulta y transforma cada fila del conjunto de resultados en un elemento XML con un identificador genérico <row /> como etiqueta de elemento. Opcionalmente, puede especificar un nombre para el elemento de fila. La salida XML resultante usa el ElementName especificado como elemento de fila generado para cada fila. Para obtener más información, vea Usar el modo RAW con FOR XML.

AUTO

Devuelve los resultados de la consulta en un árbol anidado XML sencillo. Cada tabla de la cláusula FROM, para la que al menos una columna aparece en la cláusula SELECT, se representa como un elemento XML. Las columnas enumeradas en la cláusula SELECT se asignan a los atributos de elemento adecuados. Para obtener más información, vea Usar el modo AUTO con FOR XML.

EXPLICIT

Especifica que la forma del árbol XML resultante está definida explícitamente. Con este modo, es necesario escribir las consultas de una cierta manera, de modo que se pueda especificar explícitamente información adicional sobre la anidación deseada. Para obtener más información, vea Usar el modo EXPLICIT con FOR XML.

XMLDATA

Devuelve el esquema XDR insertado, pero no agrega el elemento raíz al resultado. Si se especifica XMLDATA, el esquema XDR se anexa al documento.

Importante

La directiva XMLDATA está en desuso. Utilice la XSD generación en los modos RAW y AUTO. No se reemplaza la directiva XMLDATA en modo EXPLICIT. Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Suprimir saltos de línea no deseados: Puede usar SQL Server Management Studio (SSMS) para emitir una consulta que use la cláusula FOR XML. A veces, se devuelve una gran cantidad de código XML y se muestra en una celda de la cuadrícula. La cadena XML podría ser más larga de lo que una celda de cuadrícula de SSMS puede contener en una sola línea. En estos casos, es posible que SSMS inserte caracteres de salto de línea entre los segmentos largos de toda la cadena XML. Esos saltos de línea podrían aparecer en el medio de una subcadena que no se debería dividir entre líneas. Puede evitar los saltos de línea mediante una conversión AS XMLDATA. Esta solución también se puede aplicar cuando se usa FOR JSON PATH, como en la siguiente instrucción SELECT de ejemplo Transact-SQL:

SELECT CAST(
    (SELECT column1, column2
        FROM my_table
        FOR XML PATH('')
    )
        AS VARCHAR(MAX)
) AS XMLDATA ;

XMLSCHEMA [ ("TargetNameSpaceURI') ]

Devuelve el esquema XSD insertado. Opcionalmente puede especificar un URI de espacio de nombres de destino al especificar esta directiva, que devuelve el espacio de nombres especificado en el esquema. Para obtener más información, vea Generar un esquema XSD insertado.

ELEMENTS

Especifica que las columnas se devuelven como subelementos. Sin embargo, se les asignan atributos XML. Esta opción solo se admite en los modos RAW, AUTO y PATH. Para obtener más información, vea Usar el modo RAW con FOR XML.

XSINIL

Especifica que se crea un elemento con xsi:nil atributo establecido en true para los valores de columna de NULL. Esta opción solo se puede especificar con ELEMENTS directiva. Para más información, consulte:

ABSENT

Indica que para NULL valores de columna, los elementos XML correspondientes no se agregarán en el resultado XML. Especifique esta opción solo con ELEMENTS.

PATH [ ('ElementName') ]

Genera un contenedor de elementos <row> para cada fila del conjunto de resultados. Opcionalmente, puede especificar un nombre de elemento para el contenedor de elementos <row>. Si se proporciona una cadena vacía, como FOR XML PATH ('') ), no se genera un elemento contenedor. El uso de PATH puede proporcionar una alternativa más sencilla a las consultas escritas mediante la directiva EXPLICIT. Para obtener más información, vea Usar el modo PATH con FOR XML.

BINARY BASE64

Especifica que la consulta devuelve los datos binarios en el formato codificado BINARY BASE64. Al recuperar datos binarios mediante RAW y modo de EXPLICIT, se debe especificar esta opción. Este es el valor predeterminado en modo AUTO.

TYPE

Especifica que la consulta devuelve un resultado de tipo xml. Para más información, consulte TYPE Directive in FOR XML Queries.

ROOT [ ('RootName') ]

Especifica que se va a agregar un solo elemento de nivel superior al XML resultante. También se puede especificar el nombre del elemento raíz que se generará. Si no se especifica el nombre raíz opcional, se agrega el elemento <root> predeterminado.

Para más información, vea FOR XML (SQL Server).

Ejemplo

En el siguiente ejemplo se especifica FOR XML AUTO con las opciones TYPE y XMLSCHEMA. Debido a la opción TYPE, el conjunto de resultados que se devuelve al cliente es de tipo xml. La opción XMLSCHEMA especifica que el esquema XSD insertado está incluido en los datos XML devueltos y la opción ELEMENTS especifica que el resultado XML está centrado en elementos.

USE AdventureWorks2022;  
GO  
SELECT p.BusinessEntityID, FirstName, LastName, PhoneNumber AS Phone  
FROM Person.Person AS p  
JOIN Person.PersonPhone AS pph ON p.BusinessEntityID  = pph.BusinessEntityID  
WHERE LastName LIKE 'G%'  
ORDER BY LastName, FirstName   
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;  

FOR JSON

Observaciones

En Fabric Data Warehouse, FOR JSON debe ser el último operador de la consulta y, por tanto, no se permite dentro de subconsultas.

JSON

Especifique FOR JSON para devolver los resultados de una consulta con formato de texto JSON. También tiene que especificar uno de los siguientes modos JSON: AUTO o PATH. Para obtener más información sobre la cláusula FOR JSON, vea Dar formato a los resultados de la consulta como JSON con FOR JSON (SQL Server).

AUTO

Dar formato a la salida JSON automáticamente en función de la estructura de la instrucción SELECT especificando FOR JSON AUTO. Para más información y ejemplos, vea Aplicar formato a la salida JSON automáticamente con el modo AUTO (SQL Server).

PATH

Obtenga el control total sobre el formato de la salida JSON especificando FOR JSON PATH. PATH modo permite crear objetos contenedor y anidar propiedades complejas. Para más información y ejemplos, vea Formato de salida JSON anidada con el modo PATH (SQL Server).

INCLUDE_NULL_VALUES

Incluya NULL valores en la salida JSON especificando la opción INCLUDE_NULL_VALUES con la cláusula FOR JSON. Si no especifica esta opción, la salida no incluye propiedades JSON para NULL valores en los resultados de la consulta. Para más información y ejemplos, vea Inclusión de valores Null en la salida de JSON con la opción INCLUDE_NULL_VALUES (SQL Server).

ROOT [ ('RootName') ]

Agregue un único elemento de nivel superior a la salida JSON especificando la opción ROOT con la cláusula FOR JSON. Si no especifica la opción ROOT, la salida JSON no tiene un elemento raíz. Para más información y ejemplos, vea Agregar un nodo raíz a la salida JSON con la opción ROOT (SQL Server).

WITHOUT_ARRAY_WRAPPER

Quite los corchetes que rodean la salida JSON de forma predeterminada especificando la opción WITHOUT_ARRAY_WRAPPER con la cláusula FOR JSON. Si no especifica esta opción, la salida JSON aparecerá entre corchetes. Use la opción WITHOUT_ARRAY_WRAPPER para generar un único objeto JSON como salida. Para obtener más información, vea Quitar corchetes de la salida JSON con la opción WITHOUT_ARRAY_WRAPPER (SQL Server).

Para obtener más información, vea Dar formato JSON a los resultados de consulta con FOR JSON (SQL Server).