如何防止动态SQL for bulk insert中的SQL注入?
我使用动态SQL进行批量插入,并带有一个参数()如何防止动态SQL for bulk insert中的SQL注入?,sql,sql-server,sql-injection,bulkinsert,bulk,Sql,Sql Server,Sql Injection,Bulkinsert,Bulk,我使用动态SQL进行批量插入,并带有一个参数() 但是。。。如何避免SQL注入?一种方法是检索文件名,而不是传入。。。差不多 DECLARE @fileLocation VARCHAR(128) = '\\some\folder\location' IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames CREATE TABLE #FileNames( id int IDENTITY(1,1) ,
但是。。。如何避免SQL注入?一种方法是检索文件名,而不是传入。。。差不多
DECLARE @fileLocation VARCHAR(128) = '\\some\folder\location'
IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames
CREATE TABLE #FileNames(
id int IDENTITY(1,1)
,subdirectory nvarchar(512)
,depth int
,isfile bit)
INSERT #FileNames(subdirectory,depth,isfile)
EXEC xp_dirtree @fileLocation, 1, 1
然后,在#文件名中将是该目录中的所有文件(其中当然是isfile=1)。然后,您只需从临时表中查询文件名。一种方法是检索文件名,而不是传入文件名。。。差不多
DECLARE @fileLocation VARCHAR(128) = '\\some\folder\location'
IF OBJECT_ID('tempdb..#FileNames') IS NOT NULL DROP TABLE #FileNames
CREATE TABLE #FileNames(
id int IDENTITY(1,1)
,subdirectory nvarchar(512)
,depth int
,isfile bit)
INSERT #FileNames(subdirectory,depth,isfile)
EXEC xp_dirtree @fileLocation, 1, 1
然后,在#文件名中将是该目录中的所有文件(其中当然是isfile=1)。然后,您只需从临时表中查询文件名。您可以使用
QUOTENAME
将文件名用单引号括起来:
DECLARE @sql NVARCHAR(4000) = 'BULK INSERT TblValues FROM ' + QUOTENAME(@FileName,'''') + ' WITH ( FIELDTERMINATOR ='','', ROWTERMINATOR =''\n'' )';
EXEC (@sql);
您可以使用
QUOTENAME
将文件名用单引号括起来:
DECLARE @sql NVARCHAR(4000) = 'BULK INSERT TblValues FROM ' + QUOTENAME(@FileName,'''') + ' WITH ( FIELDTERMINATOR ='','', ROWTERMINATOR =''\n'' )';
EXEC (@sql);
看看sp_executesql@Leonidas199x-sp_executesql与参数一起工作,大容量插入不支持'FROM'子句中的参数。我不知道这一点。看看sp_executesql@Leonidas199x-sp_executesql与参数一起工作,而大容量插入不支持'FROM'子句中的参数。我不知道这一点。