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

时间:2017-03-21 21:58:22

标签: sql-server laravel varbinarymax

这是我的代码

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)?

1 个答案:

答案 0 :(得分:0)

我可以想到三种可能性。最简单的方法是创建一个shell存储过程(比如dbo.SP_WS_CUST_MAIN_VC),它只接受参数,包括$value作为varchar(max),然后将$value转换为{ {1}}并调用目标存储过程。这样可以确保使用参数替换进行正确的引用。

第二个(也是最危险的)是直接将varbinary(max)嵌入到参数中,打开各种SQL注入丑陋。

第三种方法是创建一个接受CONVERT并返回varchar(max)的UDF,然后将其嵌入基本varbinary(max)调用中,例如:

EXECUTE

任何这些都可行,但(1)和(3)也应该是安全的。

相关问题