Numéro d'article: 203638 - Dernière mise à jour: mercredi 2 février 2005 - Version: 3.4

Comment retourner des informations sur les serveurs SQL Server liée

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Agrandir tout | Réduire tout

Résumé

SQL Server 7.0 et versions ultérieures de SQL Server permettent l'ajout de sources de données externe en tant que serveurs liés. Cette fonctionnalité permet d'accéder aux requêtes distribuées, hétérogènes sur des sources de données OLE DB. Lorsque vous vous connectez à SQL Server, un curseur répertoriant les tables disponibles peut être renvoyé à l'aide de la commande SQLTables(file_handle). Cependant, la commande SQLTables(), ne retourne pas d'informations sur les tables disponibles dans les serveurs liés. Les informations concernant les serveurs liés sont retournées par trois procédures stockées SQL Server différents. Cet article décrit comment utiliser ces procédures stockées pour renvoyer des informations concernant les tables disponibles à partir de serveurs liés.

Plus d'informations

SQL Server des serveurs liés sont définies comme des mappages sur un serveur lié spécifique. Par conséquent, un serveur lié n'est pas nécessairement partie d'une base de données SQL Server.

SQL Server des serveurs liés sont définis à l'aide de la procédure stockée système sp_addlinkedserver. La définition du serveur lié contient toutes les informations nécessaires pour localiser la source de données OLE DB. Tables à distance à partir du nom de serveur lié peuvent ensuite être référencées de deux manières :
  • Le nom de serveur lié peut être utilisé comme nom de serveur dans un nom à quatre éléments utilisé comme référence de table ou vue dans une instruction Transact-SQL. Les trois autres parties du nom de faire référence à un objet du serveur lié qui est exposée sous la forme d'un ensemble de lignes.
  • Le nom de serveur lié utilisable comme paramètre d'entrée pour une fonction OPENQUERY. OPENQUERY envoie le fournisseur OLE DB une commande à exécuter. L'ensemble de lignes renvoyé peut ensuite servir comme une référence de table ou vue dans une instruction Transact-SQL.
Le serveur SQL Server utilisées pour renvoyer les informations sur les serveurs liés les procédures stockées sont :
  • sp_linkedservers
  • sp_tables_ex
  • sp_columns_ex
Chacun de SQL Server stockées procédures retour un niveau de détail relatif à des serveurs liés différent.

sp_linkedservers renvoie les colonnes suivantes :

   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 renvoie des informations sur les tables à partir du serveur lié spécifié. Cette procédure stockée accepte les arguments suivants :
   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 renvoie les colonnes suivantes :
   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 renvoie les informations de colonne, une ligne par colonne, pour les tables de serveur lié donné. sp_columns_ex renvoie les informations de colonne uniquement pour la colonne indiquée si la colonne spécifiée. Cette procédure stockée accepte les arguments suivants :
   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 renvoie les colonnes suivantes :
   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. Ouvrez l'administrateur ODBC et créez une source de données ODBC nommée «LINKSRV».

    Remarque Serveurs liés sont répertoriés sous l'onglet sécurité de SQL Server, il n'est pas nécessaire de définir une base de données par défaut lors de la création du service d'annuaire.
  2. Créez un fichier programme nommé «SP_tables.prg» à l'aide du code suivant :

       * 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. Dans la fenêtre de commande, tapez :
       DO SP_TABLES
    					

Références

Transact - SQL Reference aide ; Rechercher: «sp_addlinkedserver»; "sp_tables_ex"; «sp_linkedservers»; "sp_columns_ex"

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual FoxPro 3.0b for Macintosh
  • Microsoft Visual FoxPro 3.0 Édition Standard
  • Microsoft Visual FoxPro 3.0b Édition standard
  • Microsoft Visual FoxPro 5.0 Édition standard
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Édition Professionnelle
  • Microsoft Visual FoxPro 7.0 Édition professionnelle
  • Microsoft Visual FoxPro 8.0 Édition Professionnelle
  • Microsoft Visual FoxPro 9.0 Professional Edition
  • Microsoft SQL Server 7.0 Standard
  • Microsoft SQL Server 2000 Service Pack 3a
Mots-clés : 
kbmt kbclientserver kbdatabase kbhowto kbsqlprog KB203638 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 203638  (http://support.microsoft.com/kb/203638/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.