Sql server SQL Server SP';语法错误';使用变量时出错
我有一堆CSV文件要导入,所以我用XML创建了BCP格式文件。这些都运行良好,我可以正确导入数据 我现在尝试创建一个存储过程(我以前从未这样做过),它接受三个参数:Sql server SQL Server SP';语法错误';使用变量时出错,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一堆CSV文件要导入,所以我用XML创建了BCP格式文件。这些都运行良好,我可以正确导入数据 我现在尝试创建一个存储过程(我以前从未这样做过),它接受三个参数: 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),
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'
我在“@table\u 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
出于安全目的,我还希望对信息模式运行查询,以确保提供的表名有效。是否对其他两个变量应用相同的限制?从@csv_路径(FIRSTROW=1,FORMATFILE=@bcp_format_路径),您的更新不起作用。应该是
'BULK INSERT'+quotename(@table_name)+“FROM@csv_path…”
更可能需要正确的参数声明。无论如何,是的,@Filip是对的,附加在问题后面的“答案”肯定不会像现在这样起作用。