【发布时间】:2020-05-14 15:43:21
【问题描述】:
这是我第一次尝试用户定义的函数,所以我在识别我做错了什么时遇到了一些问题。我的目标是创建一个函数,该函数将接受零件 ID 作为参数,然后处理一系列 if 条件,分析 ID 中的第二个字符,以确定基于标准命名约定的产品类型。我在脚本中做了一些调整,我在 master 和数据库中运行了每个版本。创建函数时我没有收到任何失败错误,但是每次尝试使用它都会导致以下错误。 “get_product_type”不是可识别的内置函数名称。
此功能的当前版本如下。
create function get_product_type (@part nvarchar(30))
returns nvarchar(30)
with execute as caller
as
begin
DECLARE @product nvarchar(30);
if SUBSTRING(@part,1,1) = 'A'
set @product = 'ELLIPTICAL';
else if SUBSTRING(@part,1,1) = 'B'
set @product = 'F&D SPHERICAL';
else if SUBSTRING(@part,1,1) = 'C'
set @product = 'F&D SPHERICAL';
else if SUBSTRING(@part,1,1) = 'D'
set @product = 'HEMISPHERICAL';
else if SUBSTRING(@part,1,1) = 'E'
set @product = 'CONICAL';
else if SUBSTRING(@part,1,1) = 'F'
set @product = 'FLANGED ONLY';
else if SUBSTRING(@part,1,1) = 'G'
set @product = 'DISHED ONLY';
else if SUBSTRING(@part,1,1) = 'H'
set @product = 'TULIP BOWL';
else if SUBSTRING(@part,1,1) = 'I'
set @product = 'TESTING/COUPONS/CHARPIES';
else if SUBSTRING(@part,1,1) = 'J'
set @product = 'FLARED/DISHED';
else if SUBSTRING(@part,1,1) = 'K'
set @product = 'HEAD BRACES';
else if SUBSTRING(@part,1,1) = 'L'
set @product = 'MISCELLANEOUS';
else if SUBSTRING(@part,1,1) = 'M'
set @product = 'HEAD PAD EXTENSIONS';
else if SUBSTRING(@part,1,1) = 'N'
set @product = 'HEAD PADS';
else if SUBSTRING(@part,1,1) = 'O'
set @product = 'MISCELLANEOUS';
else if SUBSTRING(@part,1,1) = 'P'
set @product = 'HUBS';
else if SUBSTRING(@part,1,1) = 'Q'
set @product = 'FLANGED/FLUED';
else if SUBSTRING(@part,1,1) = 'R'
set @product = 'FLUED/PLATE';
else if SUBSTRING(@part,1,1) = 'S'
set @product = 'SILL PAD';
else if SUBSTRING(@part,1,1) = 'T'
set @product = 'TOOLING';
else if SUBSTRING(@part,1,1) = 'U'
set @product = 'CYLENDAR REPAD';
else if SUBSTRING(@part,1,1) = 'V'
set @product = 'ROLLING CANS';
else if SUBSTRING(@part,1,1) = 'W'
set @product = 'HEAT TREAT';
else if SUBSTRING(@part,1,1) = 'X'
set @product = 'SPHERE';
else if SUBSTRING(@part,1,1) = 'Y'
set @product = 'BLASTING';
else if SUBSTRING(@part,1,1) = 'Z'
set @product = 'MISCELLANEOUS';
else set @product = 'MISCELLANEOUS';
return @product
end
如果问题在于我如何尝试调用该函数,那么我的所有尝试都是,
get_product_type(cl.PART_ID),
如果有人能在正确的方向上提供推动力,将不胜感激。
谢谢大家。
【问题讨论】:
-
澄清一下,我一直在尝试在 select 语句中调用它,我只是不想包含整个查询,但我会相应地修改帖子
-
我有点明白你在说什么,我会做一些研究。谢谢。
-
好吧,我仍然缺少一些东西,我尝试 select * from get_product_type 'aa' 认为它会返回 'ELLIPTICAL' 但现在我得到的错误是 - 无效的对象名称 'get_product_type'。跨度>
-
是的,正如@MartinSmith 两次指出的那样,您在函数名称之前缺少
dbo.。 -
哦 - 不要使用
select * from dbo.get_product_type('aa')使用select dbo.get_product_type('aa')- 这是一个标量函数而不是表值函数
标签: sql sql-server-2008 user-defined-functions