我想将包含多个文本文件的目录插入SQL数据库。因为我有多个文件,所以我想使用一个循环来逐个获取所有文件。我在查询中使用变量时遇到问题。以下是我的询问:
DECLARE @i int = 1
DECLARE @file AS nvarchar(MAX)
WHILE(@i<=50)
BEGIN
SET @file = 'C:\Users\Barry\Desktop\Output\output' + cast(@i as varchar(2)) + '.txt';
INSERT INTO dbo.Table
SELECT book.*
FROM OPENROWSET (BULK (@file), SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn)
WITH (Id int N'$.id', BookId int N'$.book_id') AS book
SET @i = @i +1;
END
文件的示例名称:output1.txt,output2.txt等。
我用过这个 Source
我在下一行收到错误:
FROM OPENROWSET (BULK (@file), SINGLE_CLOB) as j
错误消息:无法批量加载。文件“@file”不存在。 我正在使用SQL Server 2016
答案 0 :(得分:2)
尝试使用动态SQL,因为您使用的是OPENROWSET
DECLARE @i int = 1
DECLARE @file AS nvarchar(MAX)
DECLARE @sql VARCHAR(max)
WHILE(@i<=50)
BEGIN
SET @file = 'C:\Users\Barry\Desktop\Output\output' + cast(@i as varchar(2)) + '.txt';
SET @sql = '
INSERT INTO dbo.[Table]
SELECT book.*
FROM OPENROWSET (BULK ''' + @file + ''', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn)
WITH (Id int N''$.id'', BookId int N''$.book_id'') AS book'
EXEC(@sql)
SET @i = @i +1;
END