在while循环中将映像从硬盘插入SQL Server

时间:2012-06-19 20:30:55

标签: sql-server tsql bulkinsert varbinarymax

我在硬盘上的特定硬盘中有一些照片,这些照片都有*.jpg扩展名和数字名称。

例如:1.jpg , 2.jpg , 5.jpg , ...

我正在尝试将这些照片插入到具有此架构的表格中:

CREATE TABLE Employees
(
    Id int NOT NULL,
    Photo varbinary(max)NULL
)

第一步,我不知道这有什么问题:

DECLARE @i INT
SET @i = 1
WHILE (@i <=100)
    BEGIN
        INSERT INTO Employees (Id, Photo) 
            SELECT @i,  BulkColumn 
            FROM Openrowset( Bulk 'C:\Pictures\'+convert(nvarchar(5),@i)+'.jpg', Single_Blob) as EmployeePicture
            SET @i = @i + 1
    END
GO

因为我收到错误:

  

'+'

附近的语法不正确

1 个答案:

答案 0 :(得分:1)

OPENROWSET(BULK ...)的'data_file'参数必须是带引号的字符串文字,它不能是变量或表达式。我担心你必须使用动态sql。

DECLARE @i INT
SET @i = 1
WHILE (@i <=100)
BEGIN
    DECLARE @SQL VARCHAR(MAX)
    SELECT @SQL = 'INSERT INTO Employees (Id, Photo)
        SELECT ' + convert(nvarchar(5), @i) + ', BulkColumn FROM OpenRowSet ( Bulk ''C:\Pictures\' +
        convert(nvarchar(5), @i) + '.jpg'', Single_Blob) as EmployeePicture'

    exec (@SQL)

    SET @i = @i + 1
END
GO