CREATE FUNCTION 失败,因为没有为列 1 指定列名。函数的多参数错误

CREATE FUNCTION failed because a column name is not specified for column 1. error for the Multiple parameter of function

想创建函数的多参数但它给我这个错误:

CREATE FUNCTION failed because a column name is not specified for column 1.

代码如下:

create function dmt.Impacted( 
@nameOfColumn varchar ,  @nameOfParam varchar)   
returns table   
as    
return  
(select  
case when '['+@nameOfColumn+']' is null or len(rtrim('['+@nameOfColumn+']')) = 0
then  Convert(nvarchar(2),0) 
else
@nameOfParam end from employee)  ;

SELECT 语句中定义列名 :

(select case when '['+@nameOfColumn+']' is null or 
                   len(rtrim('['+@nameOfColumn+']')) = 0
             then  Convert(nvarchar(2),0)
             else  @nameOfParam 
        end as name_column -- define column name
 from employee)

此外,您的函数参数没有数据长度,默认情况下它只接受 1 个字符 @nameOfColumn varchar , @nameOfParam varchar,其余为 trim。

正如错误消息明确指出的那样,returned 结果中的列需要一个名称。要么在 SELECT 中给它一个别名,比如

SELECT CASE
       ...
       END a_column_name
       ...

或者在 return 类型的声明中定义它,如

...
RETURNS TABLE
        (a_column_name nvarchar(max)
...

如您在第二种形式中所见,您必须指定数据类型。由于您当前的代码现在没有多大意义,我无法弄清楚那里的正确代码是什么。你需要修改它。

请注意,len(rtrim('['+@nameOfColumn+']')) = 0 永远不会为真,因为 len(rtrim('['+@nameOfColumn+']')) 要么是 NULL,而 @nameOfColumnNULL 或至少是 2因为添加了括号。

如果 @nameOfColumn 应该是一个列名你不应该使用 varchar (特别是没有指定长度)但是 sysname 这是对象的特殊类型名字。

无论哪种方式,您都应该将 @nameOfColumn@nameOfParam 的长度定义为 varchar,没有任何长度表示 varchar(1),这可能不是您想要的。也许你想要 nvarchar.

而不是 varchar

您可能还想查看 quotename()