簡體   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