CREATE FUNCTION 失败,因为没有为第 1 列指定列名。函数的 Multiple 参数出错
Posted
技术标签:
【中文标题】CREATE FUNCTION 失败,因为没有为第 1 列指定列名。函数的 Multiple 参数出错【英文标题】:CREATE FUNCTION failed because a column name is not specified for column 1. error for the Multiple parameter of function 【发布时间】:2020-01-09 10:11:49 【问题描述】:想要创建函数的多个参数,但它给了我这个错误:
CREATE FUNCTION 失败,因为没有为 第 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) ;
【问题讨论】:
为什么错误信息没有告诉你出了什么问题? 【参考方案1】:正如错误消息中明确指出的,返回结果中的列需要一个名称。在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)
,这可能不是您想要的。也许你想要nvarchar
而不是varchar
。
您可能还想查看quotename()
。
【讨论】:
【参考方案2】:在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
其余的将被修剪。
【讨论】:
以上是关于CREATE FUNCTION 失败,因为没有为第 1 列指定列名。函数的 Multiple 参数出错的主要内容,如果未能解决你的问题,请参考以下文章
MySQL CREATE FUNCTION 在共享网络服务器上失败