2010-11-25 18 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

特定のデータベースエンジン、またはランダムな推測に満足できますか? –

+0

あなたの使用しているデータベースエンジンでは、すべてのリテラル文字列をKlingonに書き込む必要があります。また、 "行く"を取り除く。動的SQLは厄介です。 –

答えて

2

ストアドプロシージャ

の中からあなたがストアドプロシージャの本体に一括ターミネータ(GO)を持つことができません

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 
+0

その背後にある理由を説明できますか? – Sukhjeevan

+0

SSMS Goは、ステートメントターミネータ/バッチターミネータです。したがって、create文を実行しようとすると、SQL Serverはスクリプトを解析して失敗します。 –

1

のようなものがGOを削除します。

関連する問題