Я строю некоторые динамические генераторы SQL для часто дублирующихся скалярных функций, и у меня возникает проблема с CONCAT
, а именно: он останавливается на полпути во время операции и возвращает неполное (усеченное) строковое значение.
(я пробовал с операторами + и CONCAT
вызовами функций, в любом случае одинаковые результаты.)
Я поместил комментарий в нижней строке, показывая, где именно оно усекает возвращаемое значение.
Это несоответствие типов данных?
Я попытался вручную привести некоторые строки к NVARCHAR ( 4000 )
, но это ничего не изменило.
Я также попытался использовать NVARCHAR ( MAX )
, ноопять же, это не имело никакого значения для результата.
В этом примере @FunctionName
и @DescriptivePKColumnName
оба NVARCHAR ( 48 )
и не являются нулевыми или пустыми.
DECLARE @SQL NVARCHAR ( 4000 ) =
IIF ( EXISTS ( SELECT 1 /* CREATE vs ALTER, does the function already exist? */
FROM [sys].[objects]
WHERE [object_id] = OBJECT_ID ( N'[dbo].[' + @FunctionName + N']' ) ) ,
N'ALTER' , N'CREATE' ) + N' FUNCTION [dbo].[' + @FunctionName + N'] /* so far so good */
(
@' + @DescriptivePKColumnName + N'Param TINYINT NOT NULL /* final + gets hung up */
)
RETURNS NVARCHAR ( 48 )
WITH NATIVE_COMPILATION ,
SCHEMABINDING
AS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT ,
LANGUAGE = N''English'' )
RETURN' ; /* Concat ends prematurely with '= N''Engli' */
Вот скриншотближайшего окна: