Resumo

O SQL Server 7,0 e versões posteriores do SQL Server permitem a adição de fontes de dados externas como servidores vinculados. Esse recurso fornece acesso a consultas heterogêneas e distribuídas em fontes de dados OLE DB. Ao conectar-se ao SQL Server, um cursor listando tabelas disponíveis pode ser retornado com o comando SQLTables (file_handle). No entanto, o comando SQLTables () não retorna informações sobre tabelas disponíveis em servidores vinculados. As informações sobre servidores vinculados são retornadas por três procedimentos armazenados do SQL Server diferentes. Este artigo descreve como usar esses procedimentos armazenados para retornar informações sobre tabelas disponíveis em servidores vinculados.

Informações adicionais

Os servidores vinculados ao SQL Server são definidos como mapeamentos em um servidor vinculado específico. Portanto, um servidor vinculado pode não necessariamente fazer parte de um banco de dados do SQL Server. Os servidores vinculados ao SQL Server são definidos usando o procedimento armazenado do sistema sp_addlinkedserver. A definição de servidor vinculado contém todas as informações necessárias para localizar a fonte de dados OLE DB. As tabelas remotas do nome do servidor vinculado podem então ser referenciadas de duas maneiras:

  • O nome do servidor vinculado pode ser usado como o nome do servidor em um nome de quatro partes usado como uma referência de tabela ou exibição em uma instrução Transact-SQL. As outras três partes do nome fazem referência a um objeto no servidor vinculado que é exposto como um conjunto de linhas.

  • O nome do servidor vinculado pode ser usado como um parâmetro de entrada para uma função AbrirConsulta. AbrirConsulta envia o provedor OLE DB um comando para executar. O conjunto de linhas retornado pode ser usado como uma referência de tabela ou exibição em uma instrução Transact-SQL.

Os procedimentos armazenados do SQL Server usados para retornar informações sobre servidores vinculados são:

  • sp_linkedservers

  • sp_tables_ex

  • sp_columns_ex

Cada um dos procedimentos armazenados do SQL Server retorna um nível de detalhes diferente relacionado aos servidores vinculados. sp_linkedservers retorna as seguintes colunas: SRV_NAME Name of the linked server. SRV_PROVIDERNAME Friendly name of the OLE DB provider managing access to the specified linked server. SRV_PRODUCT Product name of the linked server. SRV_DATASOURCE OLE DB datasource property corresponding to the specified linked server. SRV_PROVIDERSTRING OLE DB provider string property corresponding to the specified linked server. SRV_LOCATION OLE DB location property corresponding to the specified linked server. SRV_CAT OLE DB catalog property corresponding to the specified linked server. sp_tables_ex retorna informações sobre as tabelas do servidor vinculado especificado. Esse procedimento armazenado aceita os seguintes argumentos: TABLE_SERVER Name of the linked server for which to return table information, with no default. TABLE_NAME Name of the table for which to return data type information, with a default of NULL. TABLE_SCHEMA Is the table schema, with a default of NULL. TABLE_CATALOG Catalog Name of the database in which the specified table resides, with a default of NULL. TABLE_TYPE Type of the table to return, with a default of NULL. sp_tables_ex retorna as seguintes colunas: TABLE_CAT Table qualifier name. (May be null) TABLE_SCHEM Table or view owner name. TABLE_NAME Table name. TABLE_TYPE Table, system table, or view. REMARKS SQL Server does not return a value for this column. sp_columns_ex retorna informações de coluna, uma linha por coluna, para a (s) tabela (s) do servidor vinculado (s) fornecida (s). sp_columns_ex retornará as informações de coluna somente para a coluna especificada se a coluna for especificada. Esse procedimento armazenado aceita os seguintes argumentos: TABLE_SERVER Name of the linked server for which to return column information, with no default. TABLE_NAME Name of the table for which to return column information, with a default of NULL. TABLE_SCHEMA Name of the table for which to return column information, with a default of NULL. TABLE_CATALOG Catalog name of the table for which to return column information, with a default of NULL. COLUMN Name of the database column for which to provide information, with a default of NULL. ODBCVer The version of ODBC being used. ODBCVer is an integer, with a default value of 2, indicating ODBC Version 2. Valid values are 2 or 3. sp_columns_ex retorna as seguintes colunas: TABLE_CAT Table or view qualifier name. (May be null) TABLE_SCHEM Table or view owner name. TABLE_NAME Table or view name. COLUMN_NAME Column name, for each column of the specified table. DATA_TYPE Integer value corresponding to ODBC type indicators. TYPE_NAME String representing a data type. COLUMN_SIZE Number of significant digits. BUFFER_LENGTH Transfer size of the data. DECIMAL_DIGITS Number of digits to the right of the decimal point. NUM_PREC_RADIX Is the base for numeric data types. NULLABLE Specifies nullability. REMARKS This field always returns NULL. COLUMN_DEF Default value of the column. SQL_DATA_TYPE Value of the SQL data type as it appears in the TYPE field of the descriptor. SQL_DATETIME_SUB Subtype code for datetime and SQL-92 interval data types. For other data types, this column returns NULL. CHAR_OCTET_LENGTH Maximum length in bytes of a character or integer data type column. For all other data types, this column returns NULL. ORDINAL_POSITION Ordinal position of the column in the table. IS_NULLABLE Nullability of the column in the table. This column returns a zero-length string if nullability is unknown. The value returned for this column is different from the value returned for the NULLABLE column. SS_DATA_TYPE SQL Server data type, used by Open Data Services extended stored procedures.

  1. Abra o Administrador ODBC e crie uma fonte de fontes ODBC chamada "LINKSRV". Observação Como os servidores vinculados estão listados na guia Segurança do SQL Server, não é necessário definir um banco de dados padrão ao criar o DS.

  2. Crie um arquivo de programa chamado "SP_tables. prg" usando o código a seguir:

       * NOTE: This code is based on the following assumptions:   *  A DSN named LINKSRV pointing to a SQL Server  data source exists.   *  A Linked Server has been defined in SQL Server.   Connect_String="'LINKSRV','SA',''"   * Connect to SQL Server   gnConnHandle=SQLCONNECT(&Connect_String)   IF gnConnHandle>0      * Create a command string to pass to SQL Server via SQLExec.      CREATE CURSOR SQLSRVDAT (Server c(128),Table_Name c(128), ;         Column_name c(128))      * Create a command string to pass to SQL Server via SQLExec.      SQLCommand="sp_linkedservers"      * Return a cursor with the names of available linked servers.      QRYVal=SQLExec(gnConnHandle,SQLCommand,'SQLSvr')      IF QRYVal>0         SELECT SQLSvr         DO WHILE !EOF()            * Build a command to pass to SQL Server to return a cursor            * of tables available from the linked server.            SQLCommand="sp_tables_ex '"+ALLTRIM(SQLSvr.SRV_NAME)+"'"            * Return a cursor with the names of tables available from            * the specified linked server.            tables_val=SQLExec(gnConnHandle,SQLCommand,'SQLTabs')            IF tables_val>0               SELECT sqltabs               LOCA               DO WHILE !EOF()                  * Build a command to pass to SQL Server to return a                  * cursor with the fields from the specified                  * table of the defined linked server.                  SQLCommand="sp_columns_ex '"+ALLTRIM(SQLSvr.SRV_NAME) + ;                     "','"+ALLTRIM(sqltabs.Table_Name)+"'"                  * Return a cursor with the names of the columns                  * in the specified table of the linked server.                  ColVal=SQLExec(gnConnHandle,SQLCommand,'sqlcols')                  IF ColVal>0                     SELECT sqlcols                     DO WHILE !EOF()                        INSERT INTO SQLSRVDAT VALUES ;                           (SQLSvr.SRV_NAME,sqltabs.Table_Name, ;                           sqlcols.Column_name)                        SELECT sqlcols                        SKIP                     ENDDO                  ENDIF                  SELECT sqltabs                  SKIP               ENDDO            ENDIF            SELECT SQLSvr            SKIP         ENDDO      ELSE         =AERROR(L_Server)         =MESSAGEBOX(L_Server[1,2]+CHR(13)+L_Server[1,3],32,'Query Failed')      ENDIF      =SQLDISCONN(gnConnHandle)      SELECT SQLSRVDAT      IF RECCOUNT()=0         =MESSAGEBOX('No Linked Servers Detected',64,'Linked Servers')      ELSE         CALCULATE MAX(LEN(ALLTRIM(SQLSRVDAT.column_Name))) TO max_wide         BROW TITLE "Linked Server Information" WIDTH max_wide      ENDIF   ELSE      =AERROR(s_failed)      * The linked server doesn't exist, so display a message.      =MESSAGEBOX(s_failed[1,2]+CHR(13)+ ;         IIF(!ISNULL(s_failed[1,3]),s_failed[1,3],"null"),32,'Failed')   ENDIF   RETURN   * End Code.
  3. Na janela de comando, digite o seguinte: DO SP_TABLES

Referências

Ajuda da referência do Transact-SQL; Pesquisar em: "sp_addlinkedserver"; "sp_tables_ex"; "sp_linkedservers"; "sp_columns_ex"

Precisa de mais ajuda?

Expanda suas habilidades

Explore o treinamento >

Obtenha novos recursos primeiro

Ingressar no Microsoft Insider >

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×