Member 11586797 Ответов: 0

Как получить имя рабочего листа файла excel с помощью командной строки, Я хочу использовать его в процедуре SQL


я хочу написать инструкцию командной строки, которая будет извлекать мне имя рабочего листа любого файла excel в заданном месте, чтобы я мог использовать его в своей команде SQL-процедуры XP_cmd_shell.

я не хочу использовать связанный сервер для автоматического извлечения имени листа excel, поэтому я хочу написать команду DOS, которая будет извлекать имя листа через командную строку. и тогда я могу использовать эту команду в своей процедуре хранения, не создавая никакого связанного сервера.

Что я уже пробовал:

-- Get table (worksheet) or column (field) listings from an excel spreadsheet

-- SET THESE!
declare @linkedServerName sysname = 'TempExcelSpreadsheet'
declare @excelFileUrl nvarchar(1000) = 'c:\MySpreadsheet.xls'
-- /SET

-- Remove existing linked server (if necessary)
if exists(select null from sys.servers where name = @linkedServerName) begin
    exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end

-- Add the linked server
-- ACE 12.0 seems to work for both xsl and xslx, though some might prefer the older JET provider
exec sp_addlinkedserver
    @server = @linkedServerName,
    @srvproduct = 'ACE 12.0',
    @provider = 'Microsoft.ACE.OLEDB.12.0',
    @datasrc = @excelFileUrl,
    @provstr = 'Excel 12.0;HDR=Yes'

-- Grab the current user to use as a remote login
declare @suser_sname nvarchar(256) = suser_sname()

-- Add the current user as a login
exec sp_addlinkedsrvlogin
    @rmtsrvname = @linkedServerName,
    @useself = 'false',
    @locallogin = @suser_sname,
    @rmtuser = null,
    @rmtpassword = null

-- Return the table/column info
exec sp_tables_ex @linkedServerName
exec sp_columns_ex @linkedServerName

-- Remove temp linked server
if exists(select null from sys.servers where name = @linkedServerName) begin
    exec sp_dropserver @server = @linkedServerName, @droplogins = 'droplogins'
end

Mehdi Gholam

Я бы не рекомендовал связывать сервер с файлом Excel.
Что ты пытаешься сделать?

CHill60

Теперь я понимаю, почему OP пытается использовать связанный сервер - это решение go-to для неизвестных имен рабочего листа. Гогот.

CHill60

Для ясности - вам уже сказали, что вы не можете использовать для этого "команду DOS". То, что вы на самом деле просите, - это команда, которая может быть использована в командной строке SQL или код, который может быть запущен в SQL.
Вам также было сказано не использовать связанный сервер для чтения excel.
Ознакомьтесь с этой статьей для использования динамических имен листов Anupama Natarajan: динамическое имя листа в импорте электронных таблиц SSIS Excel[^]

Member 11586797

Спасибо, что ответили.Да, именно этого я и хочу. но я могу получить SQL-скрипт только для этого. поскольку я не пишу для него никакого пакета SSIS.
Потому что использование пакета SSIS потребует включения взаимодействия dll, и это взаимодействие не будет работать на моем рабочем сервере.

Так что было бы очень мило с вашей стороны, если бы я мог получить sql-скрипт внутри

CHill60

Вы можете поместить этот код в хранимую процедуру, а затем вызвать ее из командной строки sql

0 Ответов