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
,而 @nameOfColumn
是 NULL
或至少是 2
因为添加了括号。
如果 @nameOfColumn
应该是一个列名你不应该使用 varchar
(特别是没有指定长度)但是 sysname
这是对象的特殊类型名字。
无论哪种方式,您都应该将 @nameOfColumn
和 @nameOfParam
的长度定义为 varchar
,没有任何长度表示 varchar(1)
,这可能不是您想要的。也许你想要 nvarchar
.
而不是 varchar
您可能还想查看 quotename()
。
想创建函数的多参数但它给我这个错误:
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
,而 @nameOfColumn
是 NULL
或至少是 2
因为添加了括号。
如果 @nameOfColumn
应该是一个列名你不应该使用 varchar
(特别是没有指定长度)但是 sysname
这是对象的特殊类型名字。
无论哪种方式,您都应该将 @nameOfColumn
和 @nameOfParam
的长度定义为 varchar
,没有任何长度表示 varchar(1)
,这可能不是您想要的。也许你想要 nvarchar
.
varchar
您可能还想查看 quotename()
。