我有一个包含VARBINARY(MAX)
字段的表(在具有FILESTREAM
功能的SQL Server 2008中)。
我的要求是,当我准备部署到生产环境时,只能向我的IT团队提供一组按特定顺序执行的SQL脚本。我正在生产环境中创建一个新表,其中包含此VARBINARY(MAX)
字段。通常情况下,对于新表,我会编写CREATE TABLE
脚本。如果需要携带数据,则接着编写INSERT
脚本。这并不太复杂。
但是使用VARBINARY(MAX)
字段时,我使用的存储过程在该表上生成INSERT
语句时失败了。我尝试选择该字段、打印它、复制它、转换为十六进制等。主要问题在于它没有选定字段中的所有数据。我进行检查DATALENGTH([FileColumn])
,如果源行中包含1,004,382个字节,则再次插入时可以获取的最大复制或选定数据为8000。所以基本上是被截断的(即无效的)数据......
我应该如何更好地做到这一点?我尝试疯狂地在Google上搜索,但我肯定漏掉了什么。请记住,我无法访问文件系统。这必须全部用脚本完成。
SUBSTRING
和DATALENGTH
来获取整个varbinary值。如果这样做可以在你的脚本中产生可用的插入语句,那么你就完成了。如果不行,你可以尝试使用循环来获取varbinary数据的块(比如8040字节),并创建更新语句将这些块写入目标行。但希望使用SUBSTRING
来获取整个值会起作用。 - Jeff Ogata