Как получить имя рабочего листа файла 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