Sql-Server

創建儲存過程以將 Excel 文件插入表時收到錯誤

  • September 29, 2018

我想知道您能否告訴我我的查詢有什麼問題?

參數@TableName是輸入參數。

為什麼我必須再次聲明?

CREATE PROCEDURE [dbo].[OpenExcel]
   @FileName nvarchar(2000),
   @TableName varchar(2000)

AS
   BEGIN
       DECLARE @Provider nvarchar(2000)
           SET @Provider = 'Microsoft.ACE.OLEDB.12.0'

       DECLARE @etValue nvarchar(4000)
           SET @RetValue = 'select * 
                            from openrowset(''' + @Provider + 
                            ''',''Excel 8.0;Database=' + 
                            @FileName + ';hdr=no' + ''',
                            ''select " from [Sheet1$]'' )'

       DELETE FROM @TableName

       INSERT INTO @TableName

       EXEC(@RetValue)

   END

儲存過程的圖像

我收到的錯誤資訊是:

消息 1087,級別 16,狀態 1,過程 OpenExcel,第 26 行

必須聲明表變數“@TableName”。

好吧,我正在嘗試將 Excel 路徑 ( @FileName) 和表名 ( @TableName; 應插入數據的位置) 傳遞給儲存過程。

我怎樣才能做到這一點?

我有不同結構的不同表。請幫我解決這個問題。

這是您的解決方案:

Create Procedure [dbo].[OpenExcel]

@FileName nvarchar(2000),

 @TableName varchar(2000) 

AS Begin 

   declare @Provider nvarchar(2000);

   set @Provider = 'Microsoft.ACE.OLEDB.12.0';

   declare @RetValue nvarchar(4000) ;

   set @RetValue='select * from openrowset("' + @Provider + ''',''Excel 8.0;Database=' + @FileName +';hdr=no'+''', ''select * from [Sheet1$]" )' 

   declare @Bufr nvarchar(4000) 

   set @Bufr='delete from '+@TableName+';'

   set @Bufr=@Bufr+'insert into '+@TableName  exec(@RetValue) 

End 

引用自:https://dba.stackexchange.com/questions/218870