SQL查询中的变量

时间:2017-03-20 13:55:52

标签: sql sql-server tsql variables

我想将包含多个文本文件的目录插入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

1 个答案:

答案 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