You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell向SQL Server插入二进制文件的语法错误及解决方法

问题:PowerShell写入SQL Server VARBINARY字段报错

我尝试用以下PowerShell脚本调用Rest API获取文件的二进制响应,然后更新SQL Server表中指定VARBINARY类型的单元格:

$headers=@{}
$headers.Add("accept", "text/plain")
$headers.Add("authorization", "Bearer xyz")
$response = Invoke-WebRequest -Uri 'https://www.formstack.com/api/v2/download...' -Method GET -Headers $headers

$value = $response.Content
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=myServer; Database =myDB; User ID=uid; Password=pwd;"
$sqlConnection.Open()
$sqlCommand=$sqlConnection.CreateCommand()
$sqlCommand.CommandText = "UPDATE dbo.Table SET Document = $value WHERE Unique_ID ='123';"
$sqlCommand.ExecuteNonQuery()

运行脚本时出现如下错误:

Exception calling "ExecuteNonQuery" with "0" argument(s): "Incorrect syntax near '80'."

其中“80”是$response.Content字节数组的第二个元素。这段代码插入普通值没问题,但插入二进制内容就报错,请问怎么解决?


解决方法
我通过将字节数组转换为十六进制字符串解决了该问题,代码如下:

$hexString = ($value | ForEach-Object ToString X2) -join ''
$valuehex = '0x' + $hexString

补充说明

直接将字节数组拼入SQL语句时,PowerShell会把字节数组转换为纯数值字符串,这些数值会被SQL Server误判为语法的一部分,从而触发语法错误。而SQL Server的VARBINARY字段要求值为0x开头的十六进制字符串格式,转换后再拼入SQL语句就能被正常识别。

内容的提问来源于stack exchange,提问作者glop11294484

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:55:20