2010-11-25 103 views
1

有人告诉我创建此存储过程有什么问题。创建存储过程时出错

CREATE PROC ImportData 
AS 
BEGIN 

    DECLARE @DatabasePath VARCHAR(MAX) 
    SET @DatabasePath = 'E:\ABC.xls' 

    DECLARE @sql  nvarchar(MAX) 
    SET @sql = ' 
    INSERT INTO [dbo].[Table_1] 
    SELECT * 
    FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', 
      ''Excel 8.0;Database=' + @DatabasePath + ', 
      ''SELECT * FROM [Sheet1$]'') AS xlsTable' 

    EXEC sp_executesql @sql 
    GO 

END 

ERROR:- 
Incorrect syntax near '@sql'. 
Msg 102, Level 15, State 1, Line 2 
Incorrect syntax near 'END'. 
+1

任何特定的数据库引擎,或者您会对随机猜测感到满意吗? – 2010-11-25 07:00:44

+0

我猜你使用的数据库引擎需要在克林贡编写所有文字字符串。此外,摆脱“去”。和动态SQL糟透了。 – 2010-11-25 07:06:47

回答

2

从存储过程

内的东西一样

CREATE PROC ImportData 
AS 
BEGIN 

    DECLARE @DatabasePath VARCHAR(MAX) 
    SET @DatabasePath = 'E:\ABC.xls' 

    DECLARE @sql  nvarchar(MAX) 
    SET @sql = ' 
    INSERT INTO [dbo].[Table_1] 
    SELECT * 
    FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', 
      ''Excel 8.0;Database=' + @DatabasePath + ', 
      ''SELECT * FROM [Sheet1$]'') AS xlsTable' 

    EXEC sp_executesql @sql 

END 
1

取出去,你不能在一个存储过程的主体批终止(GO)。