OPENROWSET ou Opendatasource exemplo para obter dados de.XLSX or.ficheiro csv no sistema de ficheiros do Servidor Remoto

existem muitos exemplos em torno de como usar OPENROWSET e OPENDATASOURCE para abrir consultas contra tabelas em servidores SQL remotos, e para obter dados de arquivos em outros servidores. Infelizmente, nenhum deles me diz como fazer a coisa específica que eu preciso fazer, que é usar um desses comandos para obter um a ou outro .csv or .ficheiro XLSX Excel a partir de um servidor remoto, usando o endereço IP do servidor e a autenticação do windows, onde o servidor tem no servidor SQL instância instalada - apenas IIS7 ou 8.

seria óptimo se a documentação da Microsoft não omitisse exemplos básicos de como usar as suas ferramentas da forma mais provável. Não é preciso inteligência real para tentar 40 combinações diferentes de parâmetros: é apenas uma perda de tempo ineficiente. Os programadores têm coisas mais importantes a fazer do que desperdiçar horas a tentar descobrir alguma receita de 'conhecimento secreto' que é realmente apenas uma variante não-devidamente documentada do comando parâmetros, e fingir que isto tem a ver com ser inteligente.

então para aliviar a minha angústia filosófica, alguém poderia por favor fornecer um exemplo de como usar OPENROWSET ou OPENDATASOURCE para obter / selecionar conteúdo de qualquer um .ficheiro csv ou uma folha de cálculo do excel usando o endereço IP remoto do servidor XXX.XXX.XXX.XXX, um número de Porto se ele deve ser incluído, a localização do sistema de ficheiros correctamente anexada a isso ou incluída no comando, e a disposição correcta do utilizador e os parâmetros da senha. Não há instância de servidor SQL no servidor remoto - apenas IIS e um site com Windows auth. Se você tem um exemplo que funciona com a instância de servidor SQL no servidor remoto, isso vai fazer (embora eu acho que alguns dos exemplos REMOTEDATASOURCE já cobrem isso), mas eu realmente quero um exemplo onde eu não tenho que ter uma instância de servidor SQL no servidor Web Remoto.

Eu sei que podes usar servidores ligados para isto, mas há alguma bagagem extra para colocar no servidor remoto contendo o arquivo a acessar ,e no meu caso o servidor contendo o excel ou.o arquivo de texto csv nem sequer terá uma instância de servidor SQL nele-apenas IIS e um site.

(também-alguém pode confirmar se pode usar servidores ligados sem servidor SQL ou outra instância de servidor de base de dados no servidor remoto com o ficheiro de dados de texto desejado? É apenas servidores de banco de dados ligados, ou servidores ligados onde o servidor remoto pode ser apenas um servidor windows e web sem Servidor SQL instalado nele?)

este exemplo é útil, mas não me diz se SERVERPROPERTY('MachineName') AS nvarchar(128)) pode conter um endereço IP de um servidor de Windows Remoto Sem instância de servidor SQL nele, e não é sobre acessar arquivos de texto.

este exemplo vem blisterly close, mas não parece haver um resultado positivo no post, e não há nenhum arquivo de texto envolvido - apenas uma consulta DB para que o sistema remoto tenha o servidor SQL instalado?:

SELECT * 
FROM OPENROWSET('PACISOleDb', '192.168.200.172';'admin';'admin', 'SELECT * FROM DB')

existente exemplos que são bons, mas não ajudam muito:

SELECT *
FROM OPENROWSET('SQLNCLI',
   'DRIVER={SQL Server};SERVER=YourServer;UID=UserID;PWD=Password',
   'select * from sys.sysobjects')

(Origem)

SELECT ContactName, CompanyName, ContactTitle
FROM OPENDATASOURCE('SQLOLEDB',
              'Data Source=ServerName;User ID=MyUID;Password=MyPass' ).Northwind.dbo.Customers

(origem)

-- SQL Server 2012
SELECT
    *
FROM
    OPENDATASOURCE ('SQLNCLI11', 
   'Data Source=SQLInstanceName;Catalog=DBName;User ID=SQLLogin;Password=Password;').DBName.SchemaName.TableName


SELECT *
FROM OPENROWSET('SQLNCLI11',
   'DRIVER={SQL Server};SERVER=SQLInstanceName;UID=SQLLogin;PWD=Password',
   'select * from DBName..TableName')  

--Access DB
SELECT * FROM OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0', 
                              'Data Source=D:\MyDB\MyAccessDB.accdb')...TableName   

(origem)

SELECT *
FROM OPENROWSET('SQLNCLI',
   'DRIVER={SQL Server};SERVER=MyServer;UID=MyUserID;PWD=MyCleverPassword',
   'select @@ServerName') 

(fonte Presumo que o {SQL Server} aqui tem de ser um nome de servidor SQL-não um endereço IP remoto? Não está claro.)

SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                'Excel 8.0;Database=C:\test.xls;HDR=No',
                'SELECT * FROM [Sheet1$]') b

(origem)

--Excel 2007-2010
SELECT * --INTO #productlist
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0 Xml;HDR=YES;Database=C:\temp\Products.xlsx',
    'SELECT * FROM [ProductList$]');

--Excel 97-2003
SELECT * --INTO #productlist
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;HDR=YES;Database=C:\temp\Products.xls',
    'select * from [ProductList$]');

(fonte Mais uma vez-no remoto servidor, sem endereço do servidor IP, sem credenciais)

muitos para escolher daqui. Grande post no blog, mas não útil para meus fins específicos:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]); 

SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
  'Data Source=C:\DataFiles\EmployeeData1.xlsx;
   Extended Properties=Excel 12.0 Xml')...[vEmployee$];

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=NO;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

SELECT * INTO EmployeeInfo3
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES; IMEX=1;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

(origem)

a documentação do MS openrowset tem um '|' no esquema de comandos sugerindo que isto não pode ser feito remotamente:

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  
H. A aceder a dados de um ficheiro CSV sem um ficheiro de formato:

    tsql
     Copy
    SELECT * FROM OPENROWSET(
       BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
       SINGLE_CLOB) AS DATA;

Portanto, estou a pensar que a abordagem correcta ou única envolve OPENDATASOURCE com o piloto de jacto presente e acessível no servidor remoto. No entanto, a seguir o exemplo do MS, o endereço IP do servidor remoto e a senha de autenticação e o nome de utilizador vão? Se não for possível, então isso parece contraditório com as reivindicações da capacidade do comando na documentação (com base nas palavras que eles usam), e seria ótimo se eles pudessem dizer "Você não pode fazer isso", como é bastante claro que a maioria das pessoas vai tentar...

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',  
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;
Então,

Algo do género:
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'|'Microsoft.Jet.OLEDB.4.0'|'PACISOleDb', 'Data Source=XXX.XXX.XXX.XXX\DataFolder\Documents\TestExcel.xls';User ID=MyUID;Password=MyPass;Extended Properties=EXCEL 5.0')...[Sheet1$] ;

ou talvez

[15]}(POLEGARES EMPEDERNIDOS - CHATO CHATO CHATO)

Eu devia desistir e usar um servidor ligado:

EXEC sp_addlinkedserver
  @server = 'ExcelLinkSrv1',
  @srvproduct = 'Excel', 
  @provider = 'Microsoft.ACE.OLEDB.12.0',
  @datasrc = 'C:\DataFiles\EmployeeData1.xlsx',
  @provstr = 'Excel 12.0 Xml; HDR=YES; IMEX=1';
GO
Mas outra vez, posso ter ...

@server = ' 202.217.XXX. XXX '

?

Sim, eu sei que normalmente não seria difícil codificá-lo, mas vamos começar de forma simples no SSMS. Eu queria evitar o servidor ligado por diferentes razões. Como você faz isso com OPENROWSET ou então OPENDATASOURCE contra planilha excel ou então .ficheiro csv?

Podes ter todos os meus pontos de reputação ou seja lá o que for. São se a sua solução ou informação funciona (e alguém não tê-los primeiro), porque eu não me importo com essas coisas.

Author: marc_s, 2017-05-06