Бөлісу құралы:


SELECT — ПРЕДЛОЖЕНИЕ FOR (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureКонечная точка аналитики SQL в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

FOR Используйте предложение, чтобы указать один из следующих параметров для результатов запроса.

  • Укажите FOR BROWSE , чтобы разрешить обновления при просмотре результатов запроса в курсоре режима обзора.
  • Укажите FOR XML формат результатов запроса в формате XML.
  • Укажите FOR JSON формат результатов запроса в формате JSON.

Соглашения о синтаксисе Transact-SQL

Syntax

[ 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 ]
    ]

}

ДЛЯ ПРОСМОТРА

BROWSE

Указывает, что обновления разрешены при просмотре данных в курсоре режима обзора DB-Library. Вы можете просмотреть таблицу в приложении, если таблица содержит столбец метки времени , таблица имеет уникальный индекс, а FOR BROWSE параметр находится в конце SELECT инструкций, отправляемых экземпляру SQL Server.

Note

Вы не можете использовать инструкцию <lock_hint> HOLDLOCKFOR BROWSE, SELECT содержащую этот параметр.

FOR BROWSE не может отображаться в SELECT инструкциях, UNION которые оператор присоединяет.

Note

Если уникальные ключевые столбцы индекса таблицы имеют значение NULL, а таблица находится на внутренней стороне внешнего соединения, режим обзора не поддерживает индекс.

Режим обзора позволяет сканировать строки в таблице SQL Server и обновлять данные в таблице по одной строке. Чтобы получить доступ к таблице SQL Server в приложении в режиме обзора, необходимо использовать один из следующих двух вариантов:

  • Инструкция, используемая SELECT для доступа к данным из таблицы SQL Server, должна заканчиваться ключевыми словами FOR BROWSE. При включении FOR BROWSE параметра для использования режима обзора создаются временные таблицы.

  • Чтобы включить режим просмотра, выполните следующую инструкцию Transact-SQL, используя NO_BROWSETABLE этот параметр:

    SET NO_BROWSETABLE ON;
    

    При включении NO_BROWSETABLE параметра все SELECT операторы ведут себя так, как если FOR BROWSE бы параметр был добавлен к операторам. Однако этот NO_BROWSETABLE параметр не создает временные таблицы, которые FOR BROWSE обычно используются для отправки результатов в приложение.

При попытке получить доступ к данным из таблиц SQL Server в режиме обзора с помощью SELECT запроса, включающего OUTER JOIN инструкцию, и при определении уникального индекса в таблице, которая присутствует во внутренней части OUTER JOIN инструкции, режим обзора не поддерживает уникальный индекс. Режим обзора поддерживает уникальный индекс, только если все ключевые столбцы уникальных индексов могут принимать NULL значения. Режим обзора не поддерживает уникальный индекс, если выполняются следующие условия:

  • Вы пытаетесь получить доступ к данным из таблиц SQL Server в режиме просмотра с помощью SELECT запроса, который включает инструкцию OUTER JOIN .

  • Уникальный индекс определяется в таблице, которая присутствует на внутренней стороне инструкции OUTER JOIN .

Чтобы воспроизвести это поведение в режиме просмотра, выполните следующие шаги.

  1. В СРЕДЕ SQL Server Management Studio создайте базу данных с именем SampleDB.

  2. SampleDB В базе данных создайте таблицу tleft и tright таблицу, содержащую один столбец с именемc1. Определите уникальный индекс столбца c1 в таблице tleft и задайте столбец для принятия NULL значений. Для этого выполните в соответствующем окне запроса следующие инструкции Transact-SQL:

    CREATE TABLE tleft (c1 INT NULL UNIQUE);
    GO
    
    CREATE TABLE tright (c1 INT NULL);
    GO
    
  3. Вставьте несколько значений в таблицу tleft и таблицу tright. Убедитесь, что вы вставляете значение NULL в таблицу tleft. Для этого выполните в окне запроса следующие инструкции Transact-SQL:

    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);
    
  4. Включите параметр NO_BROWSETABLE. Для этого выполните в окне запроса следующие инструкции Transact-SQL:

    SET NO_BROWSETABLE ON;
    
  5. Доступ к данным в таблице tleft и таблице tright с помощью инструкции внешнего соединения в запросе SELECT. Убедитесь, что таблица tleft находится на внутренней стороне оператора внешнего соединения. Для этого выполните в окне запроса следующие инструкции Transact-SQL:

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

    Обратите внимание на следующие выходные данные в области результатов.

    c1
    ---
    NULL
    NULL
    

После запуска SELECT запроса для доступа к таблицам в режиме обзора результирующий набор SELECT запроса содержит два NULL значения столбца c1 в tleft таблице из-за определения инструкции RIGHT OUTER JOIN . Поэтому в результирующем наборе нельзя различать NULL значения, поступающие из таблицы, и NULL значения, введенные инструкцией RIGHT OUTER JOIN . Вы можете получить неверные результаты, если запрос должен игнорировать NULL значения из результирующий набор.

Note

Если столбцы, включенные в уникальный индекс, не принимают NULL значения, все NULL значения в результирующем наборе были представлены инструкцией RIGHT OUTER JOIN .

Для XML

XML

Задает возврат результатов запроса в виде XML-документа. Необходимо указать один из следующих режимов XML: RAW, AUTOEXPLICIT, EXPLICIT. Дополнительные сведения о данных XML и SQL Server см. в разделе FOR XML (SQL Server).

RAW [ ('ElementName') ]

Принимает результат запроса и преобразует каждую строку в результирующем наборе в XML-элемент с универсальным идентификатором <row /> в виде тега элемента. Дополнительно можно задать имя для элемента строки. Результат выходных данных XML использует указанный ElementName в качестве элемента строки, созданного для каждой строки. Дополнительные сведения см. в разделе "Использование режима RAW" с FOR XML.

AUTO

Возвращает результаты запроса в виде простого вложенного дерева XML. Каждая таблица в предложении FROM, для которой по крайней мере один столбец указан в предложении SELECT, представлен как XML-элемент. Столбцы, перечисленные в предложении SELECT, сопоставляются с соответствующими атрибутами элемента. Дополнительные сведения см. в разделе "Использование режима AUTO" с FOR XML.

EXPLICIT

Указывает, что форма конечного дерева XML определена явно. С помощью этого режима необходимо написать запросы определенным образом, чтобы они указали дополнительные сведения о нужном вложении явным образом. Дополнительные сведения см. в разделе "Использование режима ЯВНО" с FOR XML.

XMLDATA

Возвращает встроенную схему XDR, но не добавляет корневой элемент в результат. При указании XMLDATAсхема XDR добавляется в документ.

Important

Директива XMLDATA устарела. Используйте поколение XSD для RAW и AUTO режимов. В режиме директивы нет замены XMLDATAEXPLICIT . Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Подавление нежелательных разрывов строк. Вы можете использовать SQL Server Management Studio (SSMS) для выполнения запроса, использующего FOR XML предложение. Иногда большой объем кода XML возвращается и отображается в одной ячейке. Длина этой строки XML может превышать максимальную длину одной строки в ячейке сетки SSMS. В этих случаях SSMS может вставить символы разрыва строки между длинными сегментами одной строки XML. Такие разрывы строк могут возникать в середине подстроки, которая не должна быть разделена по строкам. Вы можете предотвратить разрывы линий с помощью приведения AS XMLDATA. Это решение также может применяться при использовании FOR JSON PATH, как показано в следующем Transact-SQL примере SELECT инструкции SELECT:

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

XMLSCHEMA [ ('TargetNameSpaceURI') ]

Возвращает встроенную XSD-схему. При задании указанной директивы, возвращающей заданное пространство имен схемы, дополнительно можно задать URI целевого пространства имен. Дополнительные сведения см. в разделе "Создание встроенной схемы XSD".

ELEMENTS

Задает возврат столбцов в виде вложенных элементов. В противном случае запрос сопоставляет их с XML-атрибутами. Этот параметр поддерживается только в режимах, AUTOа PATH также в RAWрежимах. Дополнительные сведения см. в разделе "Использование режима RAW" с FOR XML.

XSINIL

Указывает, что для значений столбцов создается NULL элемент с xsi:nil атрибутом true. Этот параметр можно указать только с помощью директивы ELEMENTS . Дополнительные сведения см. в разделе:

ABSENT

Указывает, что для NULL значений столбцов соответствующие XML-элементы не добавляются в xml-результат. Укажите этот параметр только с ELEMENTSпомощью .

PATH [ ('Имя элемента') ]

Создает оболочку элемента <row> для каждой строки в результирующем наборе. При необходимости можно указать имя элемента для оболочки элемента <row>. Если вы предоставляете пустую строку, например FOR XML PATH (''))элемент оболочки, не создается. Использование PATH может предоставить более простую альтернативу запросам, написанным с помощью директивы EXPLICIT. Дополнительные сведения см. в разделе "Использование режима PATH" с FOR XML.

BINARY BASE64

Задает возврат двоичных данных запросом в двоичном зашифрованном формате base64. При получении двоичных данных с помощью RAW и EXPLICIT режимом необходимо указать этот параметр. Этот параметр используется по умолчанию в AUTO режиме.

TYPE

Задает следующий формат выдаваемых запросом данных: тип xml. Дополнительные сведения см. в директиве TYPE в запросах FOR XML.

ROOT [ ('RootName') ]

Указывает, что в результирующий XML добавляется один элемент верхнего уровня. При необходимости можно указать имя создаваемого корневого элемента. Если корневое имя не указано, добавляется элемент по умолчанию <root> .

Дополнительные сведения см. в разделе FOR XML (SQL Server).

Example

В данном примере задается параметр FOR XML AUTO с параметрами TYPE и XMLSCHEMA. TYPE Из-за параметра запрос возвращает результирующий набор клиенту в виде xml-типа. Параметр XMLSCHEMA определяет встроенную XSD-схему, включаемую в возвращаемые XML-данные, а параметр ELEMENTS указывает, что результаты в формате XML основываются на элементах.

USE AdventureWorks2025;
SELECT p.BusinessEntityID,
       FirstName,
       LastName,
       PhoneNumber AS Phone
FROM Person.Person AS p
     INNER 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;

предназначено для JSON

Remarks

В хранилище данных Fabric запрос должен заканчиваться FOR JSON, поэтому его нельзя использовать в вложенных запросах.

JSON

Укажите FOR JSON , чтобы возвращать результаты запроса, отформатированного как текст JSON. Кроме того, необходимо указать один из следующих режимов JSON: AUTO или PATH. Дополнительные сведения о предложении см. в разделе Форматирование FOR JSONрезультатов запроса в формате JSON с ПОМОЩЬЮ FOR JSON.

AUTO

Отформатируйте выходные данные JSON автоматически на основе структуры инструкции SELECT, указав FOR JSON AUTO. Дополнительные сведения и примеры см. в разделе "Форматирование выходных данных JSON" автоматически с помощью режима AUTO.

PATH

Полный контроль над форматом выходных данных JSON, указав FOR JSON PATH. режим PATH позволяет создавать объекты-оболочки и вложенные сложные свойства. Дополнительные сведения и примеры см. в разделе Формат вложенных выходных данных JSON с режимом PATH.

INCLUDE_NULL_VALUES

Включите значения NULL в выходные данные JSON, указав параметр INCLUDE_NULL_VALUES с предложением FOR JSON. Если этот параметр не указан, выходные данные не включают свойства JSON для NULL значений в результатах запроса. Дополнительные сведения и примеры см. в разделе "Включение значений NULL" в ФОРМАТЕ JSON — параметр INCLUDE_NULL_VALUES.

ROOT [ ('RootName') ]

Добавьте один элемент верхнего уровня в выходные данные JSON, указав параметр ROOT с предложением FOR JSON. Если параметр ROOT не указан, выходные данные JSON не имеют корневого элемента. Дополнительные сведения и примеры см. в разделе "Добавление корневого узла в выходные данные JSON" с параметром ROOT.

WITHOUT_ARRAY_WRAPPER

Удалите квадратные скобки, которые окружают выходные данные JSON по умолчанию, указав параметр WITHOUT_ARRAY_WRAPPER с предложением FOR JSON. Если не указать этот параметр, выходные данные JSON будут заключены в квадратные скобки. Используйте параметр WITHOUT_ARRAY_WRAPPER для создания одного объекта JSON в качестве выходных данных. Дополнительные сведения см. в разделе "Удалить квадратные скобки" из JSON — параметр WITHOUT_ARRAY_WRAPPER.

Дополнительные сведения см. в разделе Форматирование результатов запроса в формате JSON с помощью FOR JSON.