簡體   English   中英

使用變量的SQL Server SP“語法不正確”錯誤

[英]SQL Server SP 'Incorrect syntax' error using variable

我有一堆要導入的CSV文件,因此我已經用XML創建了BCPFORMAT文件。 這些都工作正常,我可以正確導入數據。

我現在正在嘗試創建一個存儲過程(以前從未做過),該過程接受三個參數:
1.表名
2. CSV文件的路徑
3. BCPFORMAT文件的路徑

CREATE PROC dbo.usp_import_csv 
    @table_name nvarchar(100),      /* name of table to import into */
    @csv_path nvarchar(1000),       /* path to csv file */
    @bcp_format_path nvarchar(1000) /* path to BCPFORMAT file */
AS
BEGIN
    DELETE FROM @table_name
    BULK INSERT @table_name
        FROM  @csv_path
        WITH (FIRSTROW = 1 , FORMATFILE = @bcp_format_path)

END

EXEC dbo.usp_import_cttp 'dbo.new_table', 'C:\temp\new_table.csv', 'C:\Temp\new_table.xml'

Incorrect syntax near '@table_name'.收到消息Incorrect syntax near '@table_name'. 所以我顯然做的不對。 但是我不知道那是什么...

從下面得出的答案

CREATE PROC dbo.usp_import_cttp
    @table_name nvarchar(100),      /* table to import into */ 
    @csv_path nvarchar(1000),       /* folder containing latest NZULM data files */
    @bcp_format_path nvarchar(1000) /* folder containing BCPFORMAT files used to explain csv files */
AS
BEGIN
    EXEC sp_executesql 'DELETE FROM @table_name', @table_name;

    EXEC sp_executesql 'BULK INSERT @table_name
                        FROM  @csv_path
                        WITH (FIRSTROW = 1 , FORMATFILE = @bcp_format_path)', 
                        @table_name, 
                        @csv_path,
                        @bcp_format_path;

END

您不能將表名稱放入變量中。 如果要執行此操作,則唯一的方法是動態sql:在字符串變量中構建查詢。 好消息是,您至少仍可以將sp_executesql用作其他參數。

為了安全起見,我還想對information_schema進行查詢,以確保提供的表名有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM