【问题标题】:How to add a dynamic URL inside an OPENROW SET如何在 OPENROW SET 中添加动态 URL
【发布时间】:2021-12-13 00:41:35
【问题描述】:

我的 Documents 表中有一组数据行,该表中的每一行都有一个唯一列 AbsoluteUri(托管在 Azure 容器中)。我想要做的是在 OPENROWSET 的 BULK 中添加一个动态 url,以实现我的目标,即存储响应 (VARBINARY(MAX))。当我尝试在 BULK 中放置一个静态的单个 qoute 时,它​​可以工作,但是当我尝试通过从 TDM.AbsoluteUri 添加数据使其成为动态时,它会引发一些错误,这是无效的语法。下面是我试过的。

SELECT TR.Id AS TransactionID, TDM.Id AS DocumentID,
(SELECT *
FROM OPENROWSET
(
BULK TDM.AbsoluteUri,
DATA_SOURCE = 'DocumentsUri',
SINGLE_BLOB
) AS blob),
FROM [dbo].[Transaction] AS TR
LEFT JOIN [dbo].[Documents] AS TDM ON TR.Id = TDM.TransactionId

预期的结果应该是从 DocumentsUri 转换成一个 VARBINARY(MAX) 数据。

【问题讨论】:

  • 如果将 BULK 子查询更改为包含在 CROSS APPLY 中会发生什么?可能是您的子查询不知道当前 T-SQL 编写方式中的“TDM”是谁。
  • @CriticalError BULK 需要此处记录的字符串link

标签: sql sql-server select azure-sql-database openrowset


【解决方案1】:

文件名必须是字符串字面量,即动态SQL和游标。 EG

declare @images table(name varchar(200), filename varchar(200))
insert into @images (name, filename) values ('Hammer','public/Hammer.jpg')
insert into @images (name, filename) values ('Screwdriver','public/screwdriver.jpg')

declare @localImages table(name varchar(200), image varbinary(max))

declare @name varchar(200), @filename varchar(200)

declare c cursor local for 
    select * from @images
open c

fetch next from c into @name, @filename

while @@FETCH_STATUS = 0
begin
  
  declare @sql nvarchar(max) = concat(N'
    SELECT ''',@name,''' name,  BulkColumn Image 
    FROM OPENROWSET
    (
       BULK ''',@filename, ''',
       DATA_SOURCE = ''BlobStore'',
       SINGLE_BLOB
    ) AS blob;  
     ');

     print @sql

    insert into @localImages(name,image)
    exec (@sql)

  fetch next from c into @name, @filename
end

select * 
from @localImages 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2019-05-19
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多