sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver información de columna de un servidor vinculado en SQL Server (ejemplos de T-SQL)

En SQL Server puede usar el sp_columns_ex procedimiento almacenado del sistema para devolver información de columna sobre las columnas de un servidor vinculado especificado.

Puede especificar una columna individual o puede especificar todas las columnas de una base de datos, tabla, etc.

Sintaxis

La sintaxis es así:

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

El @table_server argumento es el único argumento requerido. Este es el nombre del servidor vinculado del que desea la información de la tabla.

Los otros argumentos son opcionales y cubro la mayoría de ellos en los siguientes ejemplos. Para obtener más información sobre estos argumentos, consulte la documentación de Microsoft.

Ejemplo 1:devolver una columna específica

El siguiente ejemplo devuelve información sobre una columna específica.

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

Resultado (usando salida vertical):

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

En este caso, el nombre del servidor es Homer , el nombre de la base de datos es Music , el nombre de la tabla es Artists , el esquema de la tabla es dbo y el nombre de la columna es ArtistName .

Esto también podría hacerse así:

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

Ejemplo 2:especificar solo una tabla

En este ejemplo solo especifico el nombre de la tabla.

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

Esto devuelve información sobre todas las columnas en Artistas mesa.

Ejemplo 3:especifique la base de datos y el nombre de la columna

En este ejemplo, especifico la base de datos y la columna, pero no la tabla.

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

Resultados (usando salida vertical):

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

Esto devolvió tres columnas más. Estos resultan ser de tres vistas diferentes (la base de datos tiene tres vistas con un ArtistName columna:BluesAlbums , JazzAlbums y RockAlbums ).

Ejemplo 4:especificar solo una base de datos

Aquí solo especifico la base de datos:

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

No mostraré los resultados aquí porque devolvió casi 6000 filas. La mayoría de estos eran del sys esquema de tabla.

Ejemplo 5:especificar un esquema de tabla

El siguiente ejemplo limita los resultados a un esquema de tabla específico (dbo ).

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

Esto devolvió un conjunto de resultados mucho más pequeño que el ejemplo anterior. Todavía es bastante grande, así que no lo mostraré aquí.

Ejemplo 6:caracteres comodín

También puede utilizar caracteres comodín. Aquí hay un ejemplo del uso de % carácter comodín:

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

Esto devuelve todas las columnas que comienzan con Ar . En mi caso, devolvió dos ArtistId columnas y cuatro ArtistName columnas.

Podría reducir esto:

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

Esto devolvió solo el ArtistName columnas.

Sin embargo, si elimino el r :

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

Ahora obtengo cuatro columnas adicionales llamadas AlbumName (así como el ArtistName columnas).