一个作业,其中proc使用openrowset函数读取excel文件,然后使用bcp命令导出文件。直到最近才完美运作。当我开始工作时,它给了我这个错误: -
NT AUTHORITY \ LOCAL SERVICE。无法初始化数据源对象 OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的链接服务器 “(空值)”。 [SQLSTATE 42000](错误7303)配置选项'show 高级选项'从1更改为1.运行RECONFIGURE语句 安装。 [SQLSTATE 01000](错误15457)配置选项'广告 Hoc Distributed Queries从1更改为1.运行RECONFIGURE 声明安装。 [SQLSTATE 01000](错误15457)OLE DB提供程序 “Microsoft.Jet.OLEDB.4.0”用于链接服务器“(null)”返回消息 “未指定的错误”。 [SQLSTATE 01000](错误7412)。步骤失败了。
这是存储过程代码: -
ALTER PROCEDURE [dbo].[Read_Excel]
@ExcelFilePath varchar(500)
,@OutPutFilePath nvarchar(500)
,@ServerName nvarchar(500)
,@DatabaseName nvarchar(100)
,@UserName nvarchar(50)
,@Password nvarchar(50)
,@Delimiter char(1)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Query nvarchar(1000)
DECLARE @Cmd varchar(1000)
DECLARE @FileExists int
-- Check File Existence
EXEC master..xp_fileexist @ExcelFilePath, @FileExists OUTPUT --returns 1 if exists, 0 if file is not there
if @FileExists <> 1
BEGIN PRINT 'There is no excel file available: ' + @ExcelFilePath RETURN END
-- Allow Ad hoc Distributed Queries in order to run OpenRowset Function
EXEC SP_CONFIGURE 'show advanced options', 1
RECONFIGURE
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries', 1
RECONFIGURE
-- Clear tbl_excel Table
TRUNCATE TABLE tbl_Excel
--Read EXCEL File using OPENROWSET Function
SET @Cmd = 'INSERT INTO tbl_Excel
SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;HDR=YES;IMEX=1;Database=' + @ExcelFilePath + ''',
''SELECT * FROM [Sheet1$]'')'
EXEC(@Cmd)
-- Allow Ad hoc Distributed Queries in order to run OpenRowset Function
EXEC SP_CONFIGURE 'show advanced options', 1
RECONFIGURE
EXEC SP_CONFIGURE 'Ad Hoc Distributed Queries', 0
RECONFIGURE
--Query View
SET @Query = 'SELECT id1, name1, name2, address1, address2 FROM [' + @DatabaseName + '].[dbo].[tbl_Excel]'
SET @Cmd = 'bcp "' + @Query + '" queryout "' + @OutPutFilePath +
'" -c -S' + @ServerName + ' -U' + @UserName + ' -P' +
@Password + ' -t' + @Delimiter + ''
EXEC master..xp_cmdshell @Cmd
END
提前致谢。
答案 0 :(得分:0)
您是否尝试过更改SQL Server代理登录? (服务 - &gt; SQL Server代理,右键单击“登录”)到您的用户帐户? 或者尝试不使用JET而是使用ACE
SET @Cmd = 'INSERT INTO tbl_Excel
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;HDR=YES;IMEX=1; 'Database=' + @ExcelFilePath + ', 'SELECT * FROM [Sheet1$]')'