Поделиться через


sp_special_columns (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

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

Синтаксис

sp_special_columns
    [ @table_name = ] N'table_name'
    [ , [ @table_owner = ] N'table_owner' ]
    [ , [ @table_qualifier = ] N'table_qualifier' ]
    [ , [ @col_type = ] 'col_type' ]
    [ , [ @scope = ] 'scope' ]
    [ , [ @nullable = ] 'nullable' ]
    [ , [ @ODBCVer = ] ODBCVer ]
[ ; ]

Аргументы

[ @table_name = ] N'table_name'

Имя таблицы, используемой для возврата сведений о каталоге. @table_name — sysname без значения по умолчанию. Сопоставление шаблонов подстановочных знаков не поддерживается.

[ @table_owner = ] N'table_owner'

Владелец таблицы, используемой для возврата сведений о каталоге. @table_owner — sysname с значением по умолчаниюNULL. Сопоставление шаблонов подстановочных знаков не поддерживается. Если @table_owner не задано, применяются правила видимости таблиц по умолчанию базовой системы управления базами данных (СУБД).

В SQL Server, если текущий пользователь владеет таблицей с указанным именем, возвращаются столбцы этой таблицы. Если @table_owner не указан, а текущий пользователь не владеет таблицей указанного @table_name, эта процедура ищет таблицу указанного @table_name , принадлежащей владельцу базы данных. Если таблица существует, возвращаются ее столбцы.

[ @table_qualifier = ] N'table_qualifier'

Имя квалификатора таблицы. @table_qualifier имеет имя sysname с значением по умолчаниюNULL. Различные продукты СУБД поддерживают трехкомпонентное именование таблиц (<qualifier>.<owner>.<name>). В SQL Server этот столбец представляет имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, в которой находится таблица.

[ @col_type = ] 'col_type'

Тип столбца. @col_type — char(1) с значением по умолчаниюR.

  • Тип R возвращает оптимальный столбец или набор столбцов, которые путем извлечения значений из столбца или столбцов позволяют однозначно определить любую строку в указанной таблице. Столбец может быть псевдокумун, предназначенный для этой цели, или столбец или столбцы любого уникального индекса для таблицы.

  • Тип V возвращает столбец или столбцы в указанной таблице, которые автоматически обновляются источником данных, когда любое значение в строке обновляется любой транзакцией.

[ = ] @scope 'scope'

Минимальная требуемая область ROWID. @scope — char(1) с значением по умолчаниюT.

  • Область C указывает, что ИДЕНТИФИКАТОР ROWID действителен только при расположении в этой строке.
  • Область T указывает, что идентификатор ROWID действителен для транзакции.

[ @nullable = ] 'nullable'

Указывает, могут ли специальные столбцы принимать NULL значение. @nullable — char(1), с значением по умолчаниюU.

  • O указывает специальные столбцы, не разрешающие значения NULL.
  • U указывает столбцы, частично допускающие значение NULL.

[ @ODBCVer = ] ODBCVer

Используемая версия ODBC. @ODBCVer имеет значение int, с значением по умолчанию2. Это значение означает ODBC версии 2.0. Дополнительные сведения о разнице между ODBC версии 2.0 и ODBC версии 3.0 см. в спецификации ODBC для ODBC SQLSpecialColumns версии 3.0.

Значения кода возврата

Нет.

Результирующий набор

Имя столбца Тип данных Description
SCOPE smallint Фактическая область идентификатора строки. Возможные значения: 0, 1 или 2. SQL Server всегда возвращается 0. Это поле всегда возвращает значение.

0 = SQL_SCOPE_CURROW. Идентификатор строки гарантированно действителен до тех пор, пока он расположен на этой строке. В дальнейшем повторное выделение с помощью идентификатора строки может не возвращать строку, если строка была обновлена или удалена другой транзакцией.
1 = SQL_SCOPE_TRANSACTION. Идентификатор строки гарантируется допустимым в течение текущей транзакции.
2 = SQL_SCOPE_SESSION. Идентификатор строки гарантированно действителен на протяжении сеанса (несмотря на границы транзакций).
COLUMN_NAME sysname Имя столбца для каждого столбца возвращаемого @table_name . Это поле всегда возвращает значение.
DATA_TYPE smallint Тип данных ODBC SQL.
TYPE_NAME sysname Имя типа данных, зависящей от источника данных; например, char, varchar, money или text.
PRECISION int Точность столбца на источнике данных. Это поле всегда возвращает значение.
LENGTH int Длина в байтах, необходимая для типа данных в двоичной форме в источнике данных, например 10 для char(10), 4 целочисленного числа и 2 для smallint.
SCALE smallint Масштаб столбца в источнике данных. NULL возвращается для типов данных, для которых масштаб не применяется.
PSEUDO_COLUMN smallint Указывает, является ли столбец псевдостолбцом. SQL Server всегда возвращает:1

0 = SQL_PC_UNKNOWN
1 = SQL_PC_NOT_PSEUDO
2 = SQL_PC_PSEUDO

Замечания

sp_special_columns эквивалентен SQLSpecialColumns в ODBC. Возвращаемые результаты упорядочены по SCOPE.

Разрешения

Требуется SELECT разрешение на схему.

Примеры

Следующий пример возвращает данные о столбце, которые уникально идентифицируют строки в таблице HumanResources.Department.

USE AdventureWorks2022;
GO

EXEC sp_special_columns @table_name = 'Department',
    @table_owner = 'HumanResources';