【问题标题】:[SQL Server]Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query[SQL Server]不允许从数据类型 nvarchar(max) 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询
【发布时间】:2017-03-21 21:58:21
【问题描述】:

这是我的代码

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

【问题讨论】:

    标签: sql-server laravel varbinarymax


    【解决方案1】:

    我能想到三种可能性。最简单的方法是创建一个 shell 存储过程(比如 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) 也应该是安全的。

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多