sql >> Database >  >> RDS >> Sqlserver

Kolomgegevens retourneren van een gekoppelde server in SQL Server (T-SQL-voorbeelden)

In SQL Server kunt u de sp_columns_ex . gebruiken systeem opgeslagen procedure om kolominformatie over de kolommen van een opgegeven gekoppelde server te retourneren.

U kunt een individuele kolom specificeren, of u kunt alle kolommen van een bepaalde database, tabel, enz. specificeren.

Syntaxis

De syntaxis gaat als volgt:

sp_columns_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column' ]   
     [ , [ @ODBCVer = ] 'ODBCVer' ]

De @table_server argument is het enige vereiste argument. Dit is de naam van de gekoppelde server waarvan u de tabelinformatie wilt hebben.

De andere argumenten zijn optioneel en ik behandel de meeste ervan in de volgende voorbeelden. Zie de Microsoft-documentatie voor meer informatie over deze argumenten.

Voorbeeld 1 – Geef een specifieke kolom terug

Het volgende voorbeeld retourneert informatie over een specifieke kolom.

EXEC sp_columns_ex 
  @table_server = 'Homer',   
  @table_name = 'Artists',   
  @table_schema = 'dbo',   
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultaat (met verticale uitvoer):

TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_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

In dit geval is de servernaam Homer , de databasenaam is Music , de tabelnaam is Artists , het tabelschema is dbo en de kolomnaam is ArtistName .

Dit kan ook als volgt worden gedaan:

EXEC sp_columns_ex 
  'Homer',   
  'Artists',   
   'dbo',   
  'Music',   
  'ArtistName';

Voorbeeld 2 – Specificeer alleen een tabel

In dit voorbeeld geef ik alleen de tabelnaam op.

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_name = 'Artists';

Dit retourneert informatie over alle kolommen in de Artiesten tafel.

Voorbeeld 3 – Specificeer de Database &Kolomnaam

In dit voorbeeld specificeer ik de database en kolom, maar niet de tabel.

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultaten (met verticale uitvoer):

-[ RECORD 1 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_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 2 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | BluesAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_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_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | JazzAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_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 4 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | RockAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_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

Dit leverde nog drie kolommen op. Deze komen toevallig uit drie verschillende weergaven (de database heeft drie weergaven met een ArtistName kolom:BluesAlbums , JazzAlbums , en RockAlbums ).

Voorbeeld 4 – Specificeer alleen een database

Hier specificeer ik alleen de database:

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music';

Ik zal de resultaten hier niet weergeven omdat het bijna 6.000 rijen heeft opgeleverd. De meeste hiervan waren afkomstig uit de sys tabelschema.

Voorbeeld 5 – Specificeer een tabelschema

In het volgende voorbeeld worden de resultaten beperkt tot een specifiek tabelschema (dbo ).

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Dit leverde een veel kleinere resultatenset op dan het vorige voorbeeld. Het is nog steeds vrij groot, dus ik zal het hier niet weergeven.

Voorbeeld 6 – Jokertekens

U kunt ook jokertekens gebruiken. Hier is een voorbeeld van het gebruik van de % jokerteken:

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Hiermee worden alle kolommen geretourneerd die beginnen met Ar . In mijn geval retourneerde het twee ArtistId kolommen en vier ArtistName kolommen.

Ik zou dit kunnen verfijnen:

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%Name';

Dit leverde alleen de ArtiestNaam . op kolommen.

Als ik echter de r . verwijder :

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'A%Name';

Ik krijg nu vier extra kolommen genaamd AlbumName (evenals de ArtiestNaam kolommen).


  1. SYS_GUID() Functie in Oracle

  2. Kan geen verbinding maken met Postgresql op poort 5432

  3. Hoe MATCH AGAINST werkt in MariaDB

  4. Postgres-fout:meer dan één rij geretourneerd door een subquery die als expressie wordt gebruikt