![](/img/trans.png)
[英]Implicit conversion from data type varchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query
[英][SQL Server]Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query
那是我的代码
DB::statement(DB::raw('EXECUTE dbo.SP_WS_CUST_MAIN ?,?,?,?,?,?,?'),
[ $USER_ID, $CUST_PYMT_MTHD, $CUST_CMMNT, $CUST_NAME, $ANDROID_LOCATION,
DB::raw("CONVERT(VARBINARY(MAX), $value)") , $WEEKDAY]
);
如何将nvarchar(max)转换为varbinary(max)?
我可以想到三种可能性。 最简单的方法是创建一个外壳存储过程(例如dbo.SP_WS_CUST_MAIN_VC
),该过程简单地接受参数,包括将$value
用作varchar(max),然后将$value
转换为varbinary(max)
并调用存储的目标程序。 这样可以确保在参数替换中引用正确。
第二种方法(也是最危险的方法)是将CONVERT
直接嵌入参数中,从而使您容易遭受各种SQL注入的麻烦。
第三个是创建一个接受varchar(max)
并返回varbinary(max)
的UDF,并将其嵌入到基本EXECUTE
调用中,例如:
DB::statement(DB::raw('EXECUTE dbo.SP_WS_CUST_MAIN ?,?,?,?,?,dbo.castAsVarbinary(?),?'),
[ $USER_ID, $CUST_PYMT_MTHD, $CUST_CMMNT, $CUST_NAME, $ANDROID_LOCATION,
DB::raw("CONVERT(VARBINARY(MAX), $value)") , $WEEKDAY]
);
这些方法都可以使用,但是(1)和(3)也应该是安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.