Sql “OLE DB提供程序”;微软.Jet.OLEDB.4.0“;“用于链接服务器”;(无效)“;报告了一个错误
尝试更改:Sql “OLE DB提供程序”;微软.Jet.OLEDB.4.0“;“用于链接服务器”;(无效)“;报告了一个错误,sql,excel,stored-procedures,Sql,Excel,Stored Procedures,尝试更改: SET@ExcelString='excel8.0;数据库='+@fn 致: SET@ExcelString='excel8.0;数据源='+@fn+';' 在后面的分号上不是100%确定,所以请尝试使用或不使用有时SQL Server在导入时会遇到麻烦,这可能不是您的错。我的代码前一天运行正常,但第二天没有变化。非常令人沮丧 确保对有问题的DB运行此命令(它不是主DB命令): DBCC FREEPROCCACHE 我随机尝试了这个,它似乎重置了一些东西。问题是什么?你试过什么? U
SET@ExcelString='excel8.0;数据库='+@fn
致:
SET@ExcelString='excel8.0;数据源='+@fn+';'代码>
在后面的分号上不是100%确定,所以请尝试使用或不使用有时SQL Server在导入时会遇到麻烦,这可能不是您的错。我的代码前一天运行正常,但第二天没有变化。非常令人沮丧
确保对有问题的DB运行此命令(它不是主DB命令):
DBCC FREEPROCCACHE
我随机尝试了这个,它似乎重置了一些东西。问题是什么?你试过什么?
USE [PreMfg]
GO
/****** Object: StoredProcedure [dbo].[procAddOrderItem] Script Date: 08/11/2011 10:28:21 ******/
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[procExcelQuotebyItem]
(
@OrderNumber INT
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Cmd varchar(1000)
DECLARE @fn varchar(500)
DECLARE @provider varchar(100)
DECLARE @ExcelString varchar(100)
-- New File Name to be created
SET @fn = '"D:\Pre-Manufacturing\Quote by Item.xls"'
-- FileCopy command string formation
SELECT @Cmd = 'Copy "D:\Pre-Manufacturing\Quote by Item (Excel) Template.xls" ' + @fn
-- FielCopy command execution through Shell Command
EXEC MASTER..XP_CMDSHELL @cmd, NO_OUTPUT
SET @provider = 'Microsoft.Jet.OLEDB.4.0'
SET @ExcelString = 'Excel 8.0;Database=' + @fn
-- Executing the OPENROWSET Command for copying the select contents to Excel sheet.
exec('INSERT INTO OPENROWSET(''' + @provider + ''',''' + @ExcelString + ''',''SELECT [ITEM NUMBER],[PHOTO],[DESCRIPTION],[CASE PACK],[PIECE PRICE],[CASE PRICE],[WT],[CUBE],[OUTSIDE CASE DIMENSIONS],[UPC#],[CASE UPC#] FROM [Sheet1$]'')
SELECT [ItemNumber],''' + ' ' + ''',[Item_Description],[Casepack],[Unit Price],[Case Price],[Weight],[Cube],[Case Dims],[UPC],[Case UPC] FROM [Order Summery] WHERE [Order #] = ' + @OrderNumber + '')
SET NOCOUNT OFF
END
USE [PreMfg]
GO
/****** Object: StoredProcedure [dbo].[procAddOrderItem] Script Date: 08/11/2011 10:28:21 ******/
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[procExcelQuotebyItem]
(
@OrderNumber INT
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Cmd varchar(1000)
DECLARE @fn varchar(500)
DECLARE @provider varchar(100)
DECLARE @ExcelString varchar(100)
DECLARE @SendMail varchar(100)
-- New File Name to be created
SET @fn = 'D:\Pre-Manufacturing\QuotebyItem.xls'
-- FileCopy command string formation
SET @Cmd = 'Copy D:\Pre-Manufacturing\QuotebyItemTemplate.xls ' + @fn
-- FileCopy command execution through Shell Command
EXEC MASTER..XP_CMDSHELL @cmd, NO_OUTPUT
-- Mentioning the excel destination filename
SET @provider = 'Microsoft.Jet.OLEDB.4.0'
SET @ExcelString = 'Excel 8.0;Database=' + @fn
EXEC('INSERT INTO OPENROWSET(''' + @provider + ''',''' + @ExcelString + ''',''SELECT * FROM [Sheet1$A2:K2]'')
SELECT [ITEMNUMBER],[ORDER #],[ITEM_DESCRIPTION],[CASEPACK],[UNIT PRICE],[CASE PRICE],[WEIGHT],[CUBE],[CASE DIMS],[UPC],[CASE UPC] FROM [ORDER SUMMERY] WHERE [Order #] = ''' + @OrderNumber + '''')
/* Attach the file to an email and send (the sp_send_dbmail won't accept variables in the arguments, so you have to build it with some double quotes first, then exec the whole string*/
EXEC msdb.dbo.sp_send_dbmail
@recipients= 'user@domain.com',
@subject = 'Auto-Generated Quote by Item Report',
@body = 'Quote by Item Report attached',
@body_format = 'HTML',
@file_attachments = @fn
/*Cleanup*/
SET @Cmd = 'DEL ' + @fn
EXEC xp_cmdshell @Cmd, no_output
SET NOCOUNT OFF
END