2017-03-21 13 views
0

VARBINARY (최대)에 NVARCHAR (최대)로 변환 할 수 있습니다 방법[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

나는 세 가지 가능성을 생각할 수 있습니다. 가장 간단한 방법은 $value을 varchar (max)로 사용하는 매개 변수를 받아들이고 $valuevarbinary(max)으로 변환하고 대상 저장 프로 시저를 호출하는 셸 저장 프로 시저 (예 : dbo.SP_WS_CUST_MAIN_VC)를 만드는 것입니다. 이렇게하면 매개 변수를 바꿔서 적절한 따옴표를 사용할 수 있습니다.

두 번째 (가장 위험한)는 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)도 안전해야합니다.