[英]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.