我在使用Bulk功能方面遇到了一些麻烦,我不知道该怎么做。所以,我需要将我在一个文件夹中的所有图像上传到一个表中,我可以使用下一个代码上传1个图像:
Insert into ImageTest(ID, Imagen)
SELECT 'SQL Server Image', *
FROM OPENROWSET (BULK N'C:\Users\G11904\Pictures\Students\0001.PNG', SINGLE_BLOB) image;
ImageTest只有2列,ID是NVARCHAR。 ID将保存图像的名称。 Imagen是一个Varbinary,我将在那里存储我的图像。
我现在在我的文件夹上有十个图像(稍后我会有一千个图像)。
My folder where I have all my images
所以我尝试下一个代码来尝试存储所有图像:
DECLARE @cnt INT = 0;
DECLARE @cntImage INT = 1;
WHILE @cnt < 3000
BEGIN
Insert into ImageTest(ID, Imagen)
SELECT 'SQL Server Image', *
FROM OPENROWSET (BULK CONCAT(N'C:\Users\G11904\Pictures\Students\000', @cntImage, '.PNG'), SINGLE_BLOB) image;
SET @cntImage = @cntImage + 1
END
但我收到此错误:CONCAT附近的语法不正确。
有人可以帮助尝试解决这个问题,我不确定我做错了什么。
答案 0 :(得分:0)
尝试使用动态查询;
declare @counter int=100
while 1=1
begin
set @counter=@counter-1
declare @maxid long=isnull((select top(1) id from destinationTable),0)
insert into destinationTable
select top(50000) * from sourceTable where id>@maxid
if @@rowcount=0 or @counter<0
break
end
DECLARE @cnt INT = 0;
DECLARE @cntImage INT = 1;
declare @query nvarchar(1000)
declare @imagePath nvarchar(1000)
WHILE @cnt < 3000
BEGIN
set @imagePath = CONCAT(N'C:\Users\G11904\Pictures\Students\000', @cntImage, '.PNG')
set @query =
'Insert into ImageTest(ID, Imagen)
SELECT ''SQL Server Image'', *
FROM OPENROWSET (BULK '''+@imagePath+''', SINGLE_BLOB) image; '
print @query
exec sp_executesql @query
SET @cntImage = @cntImage + 1
END
期望字符串。您无法传递变量。