V SQL Server můžete použít sp_columns
systémová uložená procedura pro vrácení informací o sloupcích pro zadané objekty, na které lze v aktuálním prostředí zadat dotaz. Mezi takové objekty patří tabulky, pohledy nebo jiné objekty, které mají sloupce, jako jsou funkce s hodnotou tabulky.
Můžete získat informace pro konkrétní sloupec nebo můžete zadat všechny sloupce z dané tabulky, zobrazení atd.
Syntaxe
Syntaxe vypadá takto:
sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ]
@table_name
argument je jediný požadovaný argument. Toto je název tabulky/objektu, ze kterého chcete informace o sloupcích.
Ostatní argumenty jsou volitelné. Další informace o těchto argumentech naleznete v dokumentaci společnosti Microsoft.
Tato uložená procedura vyžaduje SELECT
a VIEW DEFINITION
oprávnění ke schématu.
Příklad 1 – Vrácení informací pro konkrétní sloupec
Tento příklad používá všechny možné argumenty. Vrací informace pro konkrétní sloupec, v konkrétní tabulce, od konkrétního vlastníka tabulky, v konkrétní databázi.
EXEC sp_columns @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location', @ODBCVer = 2;
Výsledek (při použití vertikálního výstupu):
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)
Zde je stručnější způsob, jak to udělat:
EXEC sp_columns 'Cities', 'Application', 'WideWorldImporters', 'Location', 2;
To vrátí stejné výsledky.
Příklad 2 – Určení pouze tabulky
V tomto příkladu přepnu do jiné databáze a zadávám pouze název tabulky.
USE Music; EXEC sp_columns @table_name = 'Artists';
Výsledek (při použití vertikálního výstupu):
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)
To vrátí informace pro všechny sloupce v zadané tabulce.
Musíte však být ve správné databázi. Pokud znovu spustím předchozí příklad na jiné databázi, nedostanu žádné výsledky.
USE WideWorldImporters; EXEC sp_columns @table_name = 'Artists';
Výsledek:
Changed database context to 'WideWorldImporters'. (0 rows affected)
Příklad 3 – O kvalifikátoru tabulky
Pokud zadáte @table_qualifier
argument, musí být stejný jako aktuální databáze. Pokud tomu tak není, vrátí se chyba.
USE Music; EXEC sp_columns @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
Výsledky:
Msg 15250, Level 16, State 1, Line 24 The database name component of the object qualifier must be the name of the current database.
V tomto příkladu jsem přešel na databázi „Music“, ale pak jsem použil kvalifikátor tabulky „WideWorldImporters“, což vedlo k vrácení chybové zprávy 15250.
V tomto případě jsem měl použít tabulkový kvalifikátor „Hudba“. Případně jsem mohl argument úplně vynechat.
Příklad 4 – Zobrazení
Syntaxe je stejná, bez ohledu na typ objektu. Zde je příklad získání informací o sloupcích pro zobrazení:
EXEC sp_columns @table_name = 'Customers', @table_owner = 'Website', @column_name = 'CustomerID';
Výsledky:
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
To jsou informace o sloupcích pro zobrazení.
V tomto případě, pokud z dotazu vynechám vlastníka tabulky, vrátí se dva řádky:
EXEC sp_columns @table_name = 'Customers', @column_name = 'CustomerID';
Výsledky:
-[ 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)
Jsou vráceny dva řádky, protože existují dva objekty nazývané „Zákazníci“. Jeden je pohled a druhý je stůl. Vlastník tabulky pro zobrazení se nazývá „Web“ a vlastník tabulky pro tabulku se nazývá „Prodej“.
Příklad 5 – tabulkové funkce
Jak již bylo zmíněno, můžete také získat informace o sloupcích pro funkci s hodnotou tabulky.
Zde je příklad získání informací o sloupcích pro funkci s hodnotou tabulky. Syntaxe je opět stejná.
EXEC sp_columns @table_name = 'DetermineCustomerAccess';
Výsledky:
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