Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете информация за колона за таблица или изглед в SQL Server (T-SQL:sp_columns)

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

Можете да получите информация за конкретна колона или можете да посочите всички колони от дадена таблица, изглед и т.н.

Синтаксис

Синтаксисът е така:

sp_columns [ @table_name = ] object  
     [ , [ @table_owner = ] owner ]   
     [ , [ @table_qualifier = ] qualifier ]   
     [ , [ @column_name = ] column ]   
     [ , [ @ODBCVer = ] ODBCVer ]

@table_name аргументът е единственият задължителен аргумент. Това е името на таблицата/обекта, от който искате информацията за колоната.

Другите аргументи са незадължителни. За повече информация относно тези аргументи вижте документацията на Microsoft.

Тази съхранена процедура изисква SELECT и VIEW DEFINITION разрешения за схемата.

Пример 1 – Информация за връщане за конкретна колона

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

EXEC sp_columns
  @table_name = 'Cities', 
  @table_owner = 'Application',   
  @table_qualifier = 'WideWorldImporters',   
  @column_name = 'Location',
  @ODBCVer = 2;

Резултат (с помощта на вертикален изход):

TABLE_QUALIFIER   | WideWorldImporters
TABLE_OWNER       | Application
TABLE_NAME        | Cities
COLUMN_NAME       | Location
DATA_TYPE         | -4
TYPE_NAME         | geography
PRECISION         | 2147483647
LENGTH            | 2147483647
SCALE             | NULL
RADIX             | NULL
NULLABLE          | 1
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 2147483647
ORDINAL_POSITION  | 4
IS_NULLABLE       | YES
SS_DATA_TYPE      | 23
(1 row affected)

Ето един по-сбит начин да го направите:

EXEC sp_columns
  'Cities', 
  'Application',   
  'WideWorldImporters',   
  'Location',
  2;

Това връща същите резултати.

Пример 2 – Посочете само таблица

В този пример преминавам към друга база данни и посочвам само името на таблицата.

USE Music;
EXEC sp_columns @table_name = 'Artists';

Резултат (с помощта на вертикален изход):

Changed database context to 'Music'.
-[ RECORD 1 ]-------------------------
TABLE_QUALIFIER   | Music
TABLE_OWNER       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistId
DATA_TYPE         | 4
TYPE_NAME         | int identity
PRECISION         | 10
LENGTH            | 4
SCALE             | 0
RADIX             | 10
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | 4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 1
IS_NULLABLE       | NO
SS_DATA_TYPE      | 56
-[ RECORD 2 ]-------------------------
TABLE_QUALIFIER   | Music
TABLE_OWNER       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
PRECISION         | 255
LENGTH            | 510
SCALE             | NULL
RADIX             | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39
-[ RECORD 3 ]-------------------------
TABLE_QUALIFIER   | Music
TABLE_OWNER       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ActiveFrom
DATA_TYPE         | -9
TYPE_NAME         | date
PRECISION         | 10
LENGTH            | 20
SCALE             | NULL
RADIX             | NULL
NULLABLE          | 1
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 3
IS_NULLABLE       | YES
SS_DATA_TYPE      | 0
(3 rows affected)

Това връща информация за всички колони в посочената таблица.

Все пак трябва да сте в правилната база данни. Ако стартирам отново предишния пример в друга база данни, няма да получа резултати.

USE WideWorldImporters;
EXEC sp_columns @table_name = 'Artists';

Резултат:

Changed database context to 'WideWorldImporters'.
(0 rows affected)

Пример 3 – Относно квалификатора на таблица

Ако предоставите @table_qualifier аргумент, той трябва да е същият като текущата база данни. Ако не е, се връща грешка.

USE Music;
EXEC sp_columns
  @table_name = 'Artists',
  @table_qualifier = 'WideWorldImporters';

Резултати:

Msg 15250, Level 16, State 1, Line 24
The database name component of the object qualifier must be the name of the current database.

В този пример преминах към базата данни „Музика“, но след това използвах квалификатор на таблица на „WideWorldImporters“, което доведе до връщане на грешка Msg 15250.

В този случай трябваше да използвам квалификатор на таблица на „Музика“. Като алтернатива можех да пропусна аргумента изобщо.

Пример 4 – Изгледи

Синтаксисът е един и същ, независимо от типа на обекта. Ето пример за получаване на информация за колона за изглед:

EXEC sp_columns
  @table_name = 'Customers',
  @table_owner = 'Website',
  @column_name = 'CustomerID'; 

Резултати:

TABLE_QUALIFIER   | WideWorldImporters
TABLE_OWNER       | Website
TABLE_NAME        | Customers
COLUMN_NAME       | CustomerID
DATA_TYPE         | 4
TYPE_NAME         | int
PRECISION         | 10
LENGTH            | 4
SCALE             | 0
RADIX             | 10
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | 4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 1
IS_NULLABLE       | NO
SS_DATA_TYPE      | 56

Това е информация за колона за изглед.

В този случай, ако пропусна собственика на таблицата от заявката, се връщат два реда:

EXEC sp_columns
  @table_name = 'Customers',
  @column_name = 'CustomerID'; 

Резултати:

-[ RECORD 1 ]-------------------------
TABLE_QUALIFIER   | WideWorldImporters
TABLE_OWNER       | Sales
TABLE_NAME        | Customers
COLUMN_NAME       | CustomerID
DATA_TYPE         | 4
TYPE_NAME         | int
PRECISION         | 10
LENGTH            | 4
SCALE             | 0
RADIX             | 10
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | (NEXT VALUE FOR [Sequences].[CustomerID])
SQL_DATA_TYPE     | 4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 1
IS_NULLABLE       | NO
SS_DATA_TYPE      | 56
-[ RECORD 2 ]-------------------------
TABLE_QUALIFIER   | WideWorldImporters
TABLE_OWNER       | Website
TABLE_NAME        | Customers
COLUMN_NAME       | CustomerID
DATA_TYPE         | 4
TYPE_NAME         | int
PRECISION         | 10
LENGTH            | 4
SCALE             | 0
RADIX             | 10
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | 4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 1
IS_NULLABLE       | NO
SS_DATA_TYPE      | 56
(2 rows affected)

Връщат се два реда, защото има два обекта, наречени „Клиенти“. Едното е гледка, а другото е маса. Собственикът на таблицата за изгледа се нарича „Уебсайт“, а собственикът на таблицата за таблицата се нарича „Продажби“.

Пример 5 – Функции с таблична стойност

Както споменахме, можете също да получите информация за колони за функция с таблично значение.

Ето пример за получаване на информация за колона за функция с таблица. Още веднъж синтаксисът е същият.

EXEC sp_columns
  @table_name = 'DetermineCustomerAccess'; 

Резултати:

TABLE_QUALIFIER   | WideWorldImporters
TABLE_OWNER       | Application
TABLE_NAME        | DetermineCustomerAccess
COLUMN_NAME       | AccessResult
DATA_TYPE         | 4
TYPE_NAME         | int
PRECISION         | 10
LENGTH            | 4
SCALE             | 0
RADIX             | 10
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | 4
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | NULL
ORDINAL_POSITION  | 1
IS_NULLABLE       | NO
SS_DATA_TYPE      | 56

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите списък с разрешени/деактивирани ограничения за проверка в базата данни на SQL Server - SQL Server / TSQL Урок, част 86

  2. Как да получите последния ден от миналата седмица в sql?

  3. Как да съхранявате пароли в базата данни сигурно?

  4. Разбиране на ЗАКЛЮЧВАНЕТО на SQL Server при SELECT заявки

  5. Кеширане на временни обекти на SQL Server