Tsql 创建函数失败,因为未为列1指定列名。函数的多参数错误
想要创建函数的多参数,但它给了我以下错误: 创建函数失败,因为未为其指定列名 第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+']'))
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
您可能还想查看。为什么错误消息没有告诉您出了什么问题?为什么错误消息没有告诉您出了什么问题?