Повернення відомостей про зв'язані сервери SQL Server


Загальні відомості


SQL Server 7,0 і пізніші версії SQL Server дають змогу додавання зовнішніх джерел даних як зв'язаних серверів. Ця функція надає доступ до розподілених і різнорідних запитів щодо джерел даних OLE DB. Коли ви підключаєтеся до сервера SQL Server, ви можете повернути список доступних таблиць, щоб отримати доступ до них, використовуючи команду Sqвертаблиці (file_handle). Проте команда Sqssтаблицями () не повертає відомості про таблиці, доступні на зв'язаних серверах. Відомості про зв'язані сервери повертаються трьома різними збереженими процедурами SQL Server. У цій статті описано, як використовувати ті, що зберігалися процедури, щоб повернути інформацію про таблиці, доступні на зв'язаних серверах.

Додаткові відомості


Зв'язані сервери SQL Server визначаються як зіставлення з певним зв'язаним сервером. Таким чином, пов'язаний сервер може бути не обов'язково частиною бази даних SQL Server. Зв'язані сервери SQL Server визначаються за допомогою збереженої процедури sp_addlinkedserver системи. Визначення зв'язаного сервера містить всі відомості, необхідні, щоб знайти джерело даних OLE DB. Віддалені таблиці з імені зв'язаного сервера можуть посилатися двома способами.
  • Ім'я зв'язаного сервера можна використовувати як ім'я сервера в назві чотирьох частин, що використовується як таблиця або посилання на подання в операторі Transact-SQL. Решта трьох частин імені посилається на об'єкт на зв'язаному сервері, який відображається як набір рядків.
  • Ім'я зв'язаного сервера можна використовувати як параметр введення для функції OPENQUERY. Щоб виконати команду "ВІДКРИТИ запит", буде надіслано постачальник OLE DB. Повернуте значення рядків можна використовувати як таблицю або посилання подання в операторі Transact-SQL.
У SQL Server зберігаються процедури, які використовуються для повернення інформації про зв'язані сервери:
  • sp_linkedservers
  • sp_tables_ex
  • sp_columns_ex
Кожен із процедур, що містяться в SQL Server, повертає інший рівень деталізації, пов'язаний із пов'язаними серверами. sp_linkedservers повертає наведені нижче стовпці.
   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 повертає відомості про таблиці з указаного зв'язаного сервера. Ця Збережена процедура приймає такі аргументи:
   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 повертає наведені нижче стовпці.
   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 повертає відомості про стовпець, один рядок у стовпці, для вказаної таблиці зв'язаних серверів. sp_columns_ex повертає дані стовпця лише для вказаного стовпця, якщо вказано стовпець. Ця Збережена процедура приймає такі аргументи:
   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 повертає наведені нижче стовпці.
   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. Відкрийте адміністратор ODBC і створіть джерело даних ODBC під назвою "LINKSRV". Примітка. Оскільки зв'язані сервери відображаються на вкладці Безпека SQL Server, не потрібно встановлювати базу даних за замовчуванням під час створення DS.
  2. Створіть файл програми з іменем "SP_tables. PRG", використовуючи наведений нижче код.
       * 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. У вікні командного рядка введіть такі дії:
       DO SP_TABLES 

Посилання


Довідка з довідкової інструкції SQL Пошук за: "sp_addlinkedserver"; "sp_tables_ex"; "sp_linkedservers"; "sp_columns_ex"