[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]
);
Как конвертировать nvarchar(max) в varbinary(max)?
1 ответ
Решение
Я могу думать о трех возможностях. Простейшим было бы создать хранимую процедуру оболочки (скажем, dbo.SP_WS_CUST_MAIN_VC
) который просто принимает параметры, в том числе $value
как VARCHAR (Макс), то делает преобразование $value
к varbinary(max)
и вызывает целевую хранимую процедуру. Это обеспечивает правильное цитирование с заменой параметра.
Второе (и наиболее опасное) - это вставить CONVERT
непосредственно в параметры, открывая для себя все виды безобразия SQL-инъекций.
Третий - создать UDF, который принимает varchar(max)
и возвращает varbinary(max)
и вставьте это в базу 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) также должны быть безопасными.