繁体   English   中英

[SQL Server]不允许从数据类型nvarchar(max)到varbinary(max)的隐式转换。 使用CONVERT函数运行此查询

[英][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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM