提问人:George 提问时间:1/16/2023 最后编辑:StuGeorge 更新时间:1/16/2023 访问量:47
SSMS 不允许我在具有超过 32758 个字符的查询中将一系列字符作为 varbinary 创建插入
SSMS does not allow me to create insert a series of characters as varbinary in a query that has more than 32758 charactes
问:
我们将图像存储在表的列中,然后在 SSRS 和我们的 Web 应用程序中使用。我们没有允许用户更新这些图像的前端,因为这种情况永远不会发生。varbinary(max)
我必须更新一系列图像,所以我认为,与其在某个地方为实际在客户端环境中更新的人提供图像,不如以某种方式插入包含图像的语句,以Single_Blob方式。我需要这个,因为在许多环境中,必须更新相同的内容,并且传输图像而不是 SQL 文件会造成极大的混乱
问题
我正在尝试将一列设置为静态字符系列varbinary
UPDATE [DBO].tableName
SET columnName = 0x89504E470D0A1A...............
它工作正常。
为了创建描述图像的一系列字符,我使用这个
SELECT *
FROM OPENROWSET (Bulk 'E:\....', Single_Blob) AS Image
并将所选值复制到上面显示的值中。SET columnName =
当它生成的字符系列大于 32758 个字符时,SSMS 中的查询行为异常 (它丢失了所有颜色) ,更新语句成功运行,但图像在读取后会中断。
如果我运行这个
UPDATE [DBO].tableName
SET columnName = BulkColumn
FROM OPENROWSET (Bulk 'E:\....', Single_Blob) AS Image
对于同一图像,它被正确地写入表,因为它被正确读取。
我知道它一直不是一个最佳解决方案,但我想知道我遇到的 32758 限制是什么,因为它在互联网上无处可去,这很奇怪。
答:
0赞
George
1/16/2023
#1
在评论中,我被指出了正确的方向。 在网格模式下,单元格中显示的字符数最多,默认情况下为 32758。 建议的解决方案是使用 ETL 工具。 我最终做了以下帖子中的建议:https://stackoverflow.com/a/11897999/17446997
它工作正常。
评论
0x89504E470D0A1A
是显示为十六进制值的二进制值,而不是一系列字符。SSMS 无法显示图像,因此它将二进制文件的第一部分显示为十六进制。这并不意味着字段中只存储了 32K 行。 如果没有 A 将替换所有行中的图像内容,则不插入单个图像。UPDATE
WHERE
OPENROWSET (Bulk '....', Single_Blob)