与Concat批量(从文件夹上传所有图像)

时间:2017-12-08 18:01:41

标签: sql sql-server

我在使用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附近的语法不正确。

有人可以帮助尝试解决这个问题,我不确定我做错了什么。

1 个答案:

答案 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 期望字符串。您无法传递变量。