Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskaj informacje o kolumnie dla tabeli lub widoku w programie SQL Server (T-SQL:sp_columns)

W SQL Server możesz użyć sp_columns systemowa procedura składowana w celu zwrócenia informacji o kolumnach dla określonych obiektów, które mogą być przeszukiwane w bieżącym środowisku. Takie obiekty obejmują tabele, widoki lub inne obiekty, które mają kolumny, takie jak funkcje o wartościach tabelarycznych.

Możesz uzyskać informacje dla określonej kolumny lub możesz określić wszystkie kolumny z danej tabeli, widoku itp.

Składnia

Składnia wygląda tak:

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

@table_name argument jest jedynym wymaganym argumentem. To jest nazwa tabeli/obiektu, z którego chcesz uzyskać informacje o kolumnie.

Pozostałe argumenty są opcjonalne. Więcej informacji na temat tych argumentów można znaleźć w dokumentacji firmy Microsoft.

Ta procedura składowana wymaga SELECT i VIEW DEFINITION uprawnienia do schematu.

Przykład 1 – Zwróć informacje dla określonej kolumny

W tym przykładzie zastosowano wszystkie możliwe argumenty. Zwraca informacje dla określonej kolumny, w określonej tabeli, od określonego właściciela tabeli, w określonej bazie danych.

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

Wynik (przy użyciu wyjścia pionowego):

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)

Oto bardziej zwięzły sposób na zrobienie tego:

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

To zwraca te same wyniki.

Przykład 2 – Określ tylko tabelę

W tym przykładzie przełączam się na inną bazę danych i podaję tylko nazwę tabeli.

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

Wynik (przy użyciu wyjścia pionowego):

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)

Zwraca to informacje dla wszystkich kolumn w określonej tabeli.

Musisz jednak znajdować się we właściwej bazie danych. Jeśli ponownie uruchomię poprzedni przykład w innej bazie danych, nie otrzymam żadnych wyników.

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

Wynik:

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

Przykład 3 – Informacje o kwalifikatorze stołu

Jeśli podasz @table_qualifier argument, musi być taki sam jak bieżąca baza danych. Jeśli tak nie jest, zwracany jest błąd.

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

Wyniki:

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

W tym przykładzie przełączyłem się na bazę danych „Music”, ale potem użyłem kwalifikatora tabeli „WideWorldImporters”, co spowodowało zwrócenie błędu Msg 15250.

W tym przypadku powinienem był użyć kwalifikatora tabeli „Muzyka”. Ewentualnie mogłem całkowicie pominąć ten argument.

Przykład 4 – Wyświetlenia

Składnia jest taka sama, niezależnie od typu obiektu. Oto przykład pobierania informacji o kolumnie dla widoku:

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

Wyniki:

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

Tak się składa, że ​​są to informacje w kolumnie dla widoku.

W takim przypadku, jeśli pominę właściciela tabeli w zapytaniu, zwrócone zostaną dwa wiersze:

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

Wyniki:

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

Zwracane są dwa wiersze, ponieważ istnieją dwa obiekty zwane „Klientami”. Jeden to widok, a drugi to stół. Właściciel tabeli dla widoku nazywa się „Witryna”, a właściciel tabeli nazywa się „Sprzedaż”.

Przykład 5 – Funkcje o wartościach tabelarycznych

Jak wspomniano, możesz również uzyskać informacje o kolumnach dla funkcji o wartościach w tabeli.

Oto przykład pobierania informacji o kolumnach dla funkcji z wartościami przechowywanymi w tabeli. Po raz kolejny składnia jest taka sama.

EXEC sp_columns
  @table_name = 'DetermineCustomerAccess'; 

Wyniki:

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. Jak dodać numery linii w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL, część 11

  2. dołącz do kolumny danych rozdzielanych przecinkami

  3. Żądanie nie powiodło się ze stanem HTTP 401:Unauthorized IN SSRS

  4. Wyszukiwanie rozmyte w programie SQL Server z wartością procentową dopasowania

  5. Przechowywana procedura i uprawnienia — czy WYKONANIE wystarczy?