sql >> データベース >  >> RDS >> Sqlserver

Excel ファイルを SQL Server のリンク サーバーとして構成するにはどうすればよいですか?

    SQL SERVER 2012+ を使用している場合は、SQL Server 2012+ に付属する Microsoft OLEDB 12.0 Provider を使用できます。これにより、Excel 2007-2013 xlsx ファイルをアドホック分散クエリまたはリンク サーバーとして使用できます。以下に例を示します。

    Excel ワークブック 'Application.xlsx' には 3 つのワークシート Application、Device、UserFirst Activate Ad Hoc Queries on the Server があります。

    USE MSDB
    GO
    sp_configure 'show advanced options', 1
    GO
    RECONFIGURE WITH OverRide
    GO
    sp_configure 'Ad Hoc Distributed Queries', 1
    GO
    RECONFIGURE WITH OverRide
    GO
    
    EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
    GO
    
    EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
    

    アドホック クエリには、OPENROWSET 関数を使用します。

    SELECT * FROM 
    OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel   8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [Application$]');
    
    SELECT * FROM 
    OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel   8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [Device$]');
    
    SELECT * FROM 
    OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel  8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [User$]');
    

    Excel 2007-2013 形式のリンク サーバーを作成する場合:

    USE MSDB
    GO
    EXEC sp_addLinkedServer
    @server= 'XLSX_MATRIX',
    @srvproduct = 'ACE 12.0',
    @provider = 'Microsoft.ACE.OLEDB.12.0',
    @datasrc = 'C:\Users\Administrator\Desktop\Application.xlsx',
    @provstr = 'Excel 12.0; HDR=Yes'
    

    次に、次の 2 つの方法で Excel ファイルをクエリします。

    SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [Application$]')
    SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [Device$]')
    SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [User$]')
    
    SELECT * FROM XLSX_MATRIX...[Application$]
    SELECT * FROM XLSX_MATRIX...[Device$]
    SELECT * FROM XLSX_MATRIX...[User$]
    


    1. 更新時に変更のないタイムスタンプ

    2. MySQLは列が空でない場所を選択します

    3. 部門の切り替えによるテーブルの重複従業員

    4. Oracle:SELECTリストのサブクエリで並列実行を使用しない論理的な理由はありますか?