Tsql 创建函数失败,因为未为列1指定列名。函数的多参数错误

Tsql 创建函数失败,因为未为列1指定列名。函数的多参数错误,tsql,sql-server-2008,stored-functions,Tsql,Sql Server 2008,Stored Functions,想要创建函数的多参数,但它给了我以下错误: 创建函数失败,因为未为其指定列名 第1栏 代码如下: create function dmt.Impacted( @nameOfColumn varchar , @nameOfParam varchar) returns table as return (select case when '['+@nameOfColumn+']' is null or len(rtrim('['+@nameOfColumn+']'))

想要创建函数的多参数,但它给了我以下错误:

创建函数失败,因为未为其指定列名 第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
&rest将进行修剪。

选择
语句中定义列的名称:

(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
&rest将进行修剪。

正如错误消息明确指出的,返回结果中的列需要名称。在
选择中为其指定别名

SELECT CASE
       ...
       END a_column_name
       ...
或者在返回类型的声明中定义它,如中所示

...
RETURNS TABLE
        (a_column_name nvarchar(max)
...
正如您在第二个表单中看到的,您必须指定一个数据类型。由于您当前的代码没有多大意义,我现在无法找出正确的代码。你需要修改它

请注意,
len(rtrim('['+@nameOfColumn+'])=0
从来都不是真的,因为
len(rtrim('['+@nameOfColumn+'])
@nameOfColumn
时为
NULL,或者由于添加了括号,至少
2

如果假定
@nameOfColumn
为列名,则不应使用
varchar
(特别是没有为其指定长度),而应使用对象名的特殊类型
sysname

无论哪种方式,您都应该为
@nameOfColumn
@nameOfParam
定义一个长度,就像
varchar
一样,没有任何长度意味着
varchar(1)
,这可能不是您想要的。也许你想要的不是
varchar
,而是
nvarchar


您可能还需要查看。

正如错误消息明确指出的,返回结果中的列需要一个名称。在
选择中为其指定别名

SELECT CASE
       ...
       END a_column_name
       ...
或者在返回类型的声明中定义它,如中所示

...
RETURNS TABLE
        (a_column_name nvarchar(max)
...
正如您在第二个表单中看到的,您必须指定一个数据类型。由于您当前的代码没有多大意义,我现在无法找出正确的代码。你需要修改它

请注意,
len(rtrim('['+@nameOfColumn+'])=0
从来都不是真的,因为
len(rtrim('['+@nameOfColumn+'])
@nameOfColumn
时为
NULL,或者由于添加了括号,至少
2

如果假定
@nameOfColumn
为列名,则不应使用
varchar
(特别是没有为其指定长度),而应使用对象名的特殊类型
sysname

无论哪种方式,您都应该为
@nameOfColumn
@nameOfParam
定义一个长度,就像
varchar
一样,没有任何长度意味着
varchar(1)
,这可能不是您想要的。也许你想要的不是
varchar
,而是
nvarchar


您可能还想查看。

为什么错误消息没有告诉您出了什么问题?为什么错误消息没有告诉您出了什么问题?