Sql 批量插入参数化第一行

Sql 批量插入参数化第一行,sql,sql-server,bulkinsert,Sql,Sql Server,Bulkinsert,有没有办法参数化批量插入查询中的第一行 这是我的select语句 按mid DESC顺序从电影标题中选择前1名mid 返回整数值,我想在大容量插入语句中提供其结果 BULK INSERT movie_titles FROM 'A:\Netflix\movie_titles.txt' WITH ( FIRSTROW = 'here i want to provide the result of above select query', FIELDTERMINATOR = ',', ROWTERMI

有没有办法参数化批量插入查询中的第一行

这是我的select语句
按mid DESC顺序从电影标题中选择前1名mid

返回整数值,我想在大容量插入语句中提供其结果

BULK
INSERT movie_titles
FROM 'A:\Netflix\movie_titles.txt'
WITH
(
FIRSTROW = 'here i want to provide the result of above select query',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

无法为第一行提供@variable name。如果要这样做,您需要通过字符串连接动态创建大容量INSERT语句,并使用EXEC或sp_execute执行它。

无法为第一行提供@variable name。如果您想这样做,您需要通过字符串连接动态创建大容量INSERT语句,并使用EXEC或sp_execute执行它。

AFAIK,您不能直接将参数传递给
第一行。相反,您可以像下面这样作为动态SQL执行
批量插入
未测试,但这将帮助您开始)


好的,您不能直接将参数传递给
FIRSTROW
。相反,您可以像下面这样作为动态SQL执行
批量插入
未测试,但这将帮助您开始)


如果您尝试使用变量,例如
FIRSTROW=@MID
,它会提示错误@Mid附近的语法不正确,应将INT、TEXT、STRINGBULK插入Sql Server中的暂存表中,并从中触发一个after INSERT触发器来执行您在此处尝试执行的操作。如果您尝试使用变量,例如
FIRSTROW=@Mid
,则会提示错误“在Sql Server中,@Mid附近的语法不正确,应为INT、TEXT、STRINGBULK插入到一个暂存表中,并从那里触发一个after INSERT触发器来执行您在此处尝试执行的操作。它给了我一个错误消息245,级别16,状态1,第2行转换varchar值“按mid DESC;从电影标题顺序中选择前1个mid”时失败要查看数据类型int.@salmahasni,请选中编辑的答案。我认为
mid
是int类型,因为
firstrow
属性需要int类型。如何防止SQL注入?@Rahul我刚刚偶然发现了这个答案并修复了它:)对Jimbo:这里没有SQL注入的机会,因为它只是一个转换为字符串的数字,这不是任意用户提供的字符串。当转换varchar值“按mid DESC从电影标题顺序选择TOP 1 mid”时,它向我显示此错误消息245,级别16,状态1,第2行转换失败要查看数据类型int.@salmahasni,请选中编辑的答案。我认为
mid
是int类型,因为
firstrow
属性需要int类型。如何防止SQL注入?@Rahul我刚刚偶然发现了这个答案并修复了它:)Jimbo:这里不可能有SQL注入,因为它只是一个转换为字符串的数字,而不是任意用户提供的字符串。
DECLARE @midvar INT;
SELECT TOP 1 @midvar = cast(mid as INT) from movie_titles ORDER BY mid DESC;
DECLARE @bulk_cmd varchar(1000);
SET @bulk_cmd = 'BULK INSERT movie_titles
FROM ''A:\Netflix\movie_titles.txt'' 
WITH (ROWTERMINATOR = '''+CHAR(10)+'' +
'FIELDTERMINATOR ='',''
FIRSTROW = ' + CAST(@midvar AS VARCHAR(10)) + ')';
EXEC(@bulk_cmd);