Как ясно сказано в сообщении об ошибке, столбцу в возвращаемом результате нужно имя. Либо дайте ему псевдоним в SELECT
как
SELECT CASE
...
END a_column_name
...
, либо определите его в объявлении типа возвращаемого значения, как в
...
RETURNS TABLE
(a_column_name nvarchar(max)
...
Как вы можете видеть во второй форме, вы должны указать тип данных. Поскольку ваш текущий код не имеет особого смысла, сейчас я не могу понять, что является правильным. Вам нужно будет изменить его.
Обратите внимание, что len(rtrim('['+@nameOfColumn+']')) = 0
никогда не соответствует действительности, поскольку len(rtrim('['+@nameOfColumn+']'))
либо NULL
, когда @nameOfColumn
равно NULL
, либо, по крайней мере, 2
из-за добавлены скобки.
Если предполагается, что @nameOfColumn
- это имя столбца, вы не должны использовать varchar
(особенно без указанной длины), но sysname
, который является специальным типом для имен объектов.
В любом случае вы должны определить длину для @nameOfColumn
и @nameOfParam
как просто varchar
без какой-либо длины, что означает varchar(1)
, что, вероятно, не то, что вы хотите. И, возможно, вместо varchar
вы хотите nvarchar
.
Возможно, вы также захотите посмотреть quotename()
.