2017-03-21 125 views
0

varbinary型(最大)までのnvarchar(max)を[SQL Server]データ型nvarchar(max)からvarbinary(max)への暗黙的な変換は許可されていません。このクエリを実行するために、CONVERT関数を使用して私のコードです

変換することができますどの
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] 
); 

答えて

0

私は3つの可能性を考えることができます。最も簡単な方法は、$valueをvarchar(max)としてパラメータを受け入れるだけで、$valueからvarbinary(max)への変換を行い、ターゲットストアドプロシージャを呼び出すシェルストアドプロシージャ(たとえばdbo.SP_WS_CUST_MAIN_VC)を作成することです。これにより、パラメータの置換を適切に行うことができます。

2番目(最も危険です)は、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)も安全でなければならない。

関連する問題