Я генерирую операторы T-SQL SELECT для таблиц, для которых у меня нет предварительной информации о типе данных. В этих инструкциях мне нужно выполнить операции со строками, которые зависят от длины исходного значения столбцов таблиц.
Одним из примеров (но не единственным) является вставка некоторого текста в определенную позицию в строке, включая возможность вставить его в конце:
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
(CASE WHEN + LEN требуется, потому что STUFF не позволяет мне вставлять текст в конец строки.)
Проблема в том, что LEN исключает конечные пробелы, что разрушит расчет.
Я знаю, что могу использовать DATALENGTH, который не исключает конечные пробелы, но я не могу преобразовать байты, возвращаемые DATALENGTH, в символы, требуемые STUFF, потому что я не знаю, имеет ли столбец Product тип varchar или nvarchar.
Итак, как я могу сгенерировать оператор SQL, который зависит от точной длины строки в символах, без предварительной информации об используемом типе данных строки?