Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Spalteninformationen von einem Verbindungsserver in SQL Server zurückgeben (T-SQL-Beispiele)

In SQL Server können Sie den sp_columns_ex verwenden gespeicherte Systemprozedur, um Spalteninformationen zu den Spalten von einem angegebenen Verbindungsserver zurückzugeben.

Sie können eine einzelne Spalte oder alle Spalten einer bestimmten Datenbank, Tabelle usw. angeben.

Syntax

Die Syntax lautet wie folgt:

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

Der @table_server Argument ist das einzige erforderliche Argument. Dies ist der Name des Verbindungsservers, von dem Sie die Tabelleninformationen erhalten möchten.

Die anderen Argumente sind optional, und ich behandle die meisten davon in den folgenden Beispielen. Weitere Informationen zu diesen Argumenten finden Sie in der Microsoft-Dokumentation.

Beispiel 1 – Gibt eine bestimmte Spalte zurück

Das folgende Beispiel gibt Informationen zu einer bestimmten Spalte zurück.

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

Ergebnis (bei vertikaler Ausgabe):

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 diesem Fall lautet der Servername Homer , der Datenbankname ist Music , lautet der Tabellenname Artists , das Tabellenschema ist dbo und der Spaltenname ist ArtistName .

Dies könnte auch so geschehen:

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

Beispiel 2 – Geben Sie nur eine Tabelle an

In diesem Beispiel gebe ich nur den Tabellennamen an.

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

Dies gibt Informationen über alle Spalten in den Künstlern zurück Tisch.

Beispiel 3 – Geben Sie den Datenbank- und Spaltennamen an

In diesem Beispiel gebe ich die Datenbank und die Spalte an, aber nicht die Tabelle.

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

Ergebnisse (mit vertikaler Ausgabe):

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

Dadurch wurden drei weitere Spalten zurückgegeben. Diese stammen zufällig aus drei verschiedenen Ansichten (die Datenbank hat drei Ansichten mit einem ArtistName Spalte:BluesAlbums , JazzAlbums , und RockAlbums ).

Beispiel 4 – Geben Sie nur eine Datenbank an

Hier gebe ich nur die Datenbank an:

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

Ich werde die Ergebnisse hier nicht anzeigen, da fast 6.000 Zeilen zurückgegeben wurden. Die meisten davon stammten von sys Tabellenschema.

Beispiel 5 – Geben Sie ein Tabellenschema an

Das folgende Beispiel beschränkt die Ergebnisse auf ein bestimmtes Tabellenschema (dbo ).

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

Dadurch wurde eine viel kleinere Ergebnismenge als im vorherigen Beispiel zurückgegeben. Es ist immer noch ziemlich groß, also werde ich es hier nicht anzeigen.

Beispiel 6 – Platzhalterzeichen

Sie können auch Platzhalterzeichen verwenden. Hier ist ein Beispiel für die Verwendung von % Platzhalterzeichen:

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

Dies gibt alle Spalten zurück, die mit Ar beginnen . In meinem Fall wurden zwei ArtistId zurückgegeben Spalten und vier ArtistName Spalten.

Ich könnte das eingrenzen:

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

Dies gab nur den ArtistName zurück Spalten.

Wenn ich jedoch das r entferne :

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

Ich bekomme jetzt vier zusätzliche Spalten namens AlbumName (sowie der ArtistName Spalten).