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