我正在使用SQL Server Management Studio。
我创建了一个名为func_GetMenuItemsForMenu
的函数,你将把这个函数传递给函数。该函数将找到菜单上的所有MenuItem。它会返回一张表。
CREATE FUNCTION [dbo].[func_GetMenuItemsForMenu]
(
@MenuItemMenuItemID NVARCHAR(200)
)
RETURNS TABLE
AS
RETURN (
SELECT Menu.MenuID FROM Menu, MenuItem
WHERE MenuItem.MenuID LIKE @MenuItemMenuItemID + '%'
AND MenuItem.MenuID = Menu.MenuID)
GO
我正在尝试创建一个名为func_GetMenuItemDescriptionForMenuItemID
的函数
它应该在标题中按预期运行并将MenuItemID
传递给函数并返回MenuItemDescription
,一个标量(varchar)。
这是我到目前为止所拥有的。我不知道以下功能是否正确并且将如上所述执行?
CREATE FUNCTION [dbo].[func_GetMenuItemDescriptionForMenuItemID]
(
@MenuItemID nvarchar (200)
)
RETURNS nvarchar (200)
AS
BEGIN
RETURN (SELECT TOP 5 MenuItemDescriptionText
FROM MenuItem
WHERE MenuItemID = @MenuItemID)
END
所有表/字段/关系都显示在下面的数据库图中,标题中ID为ID的所有字段均为int,其余为varchar。
如图所示,每个表中的字段MenuID是表格菜单字段MenuID的外键。同样,Table MenuItem中的Field MenuGrouID是Table MenuGroup中MenuGroupID的外键
我需要使用这两个函数来创建一个SQL查询或存储过程,它使用函数调用来返回给定菜单上显示的所有菜单项的描述,并且在编写此查询时遇到问题以及看我的第二个功能是否符合标准
感谢您的投入。
答案 0 :(得分:0)
你应该返回一个标量。 SELECT TOP 5...
返回result set。您必须声明一个变量并将要查找的值分配给它。然后返回该变量。
CREATE FUNCTION [dbo].[func_GetMenuItemDescriptionForMenuItemID]
(
@MenuItemID nvarchar (200)
)
RETURNS nvarchar (200)
BEGIN
DECLARE @ReturnVariable NVARCHAR(200);
SELECT @ReturnVariable = MenuItemDescriptionText FROM MenuItem WHERE MenuItemID = @MenuItemID;
RETURN @ReturnVariable;
END
答案 1 :(得分:0)
CREATE FUNCTION [dbo].[func_GetMenuItemDescriptionForMenuItemID]
(
@MenuItemID nvarchar (200)
)
RETURNS nvarchar (200)
AS
BEGIN
RETURN (SELECT MenuItemDescriptionText
FROM MenuItem
WHERE MenuItemID = @MenuItemID)
END
如何调用功能
将“1007”替换为您的商品ID
select [dbo].[func_GetMenuItemDescriptionForMenuItemID]('1007')
答案 2 :(得分:0)
你定义了一个Scalar值函数(一个只返回一个值的函数),你想要的是一个Table值函数(一个返回多行的函数):
CREATE FUNCTION [dbo].[func_GetMenuItemDescriptionForMenuItemID]
(
@MenuItemID nvarchar (200)
)
RETURNS @results TABLE(description nvarchar (200))
AS
BEGIN
INSERT INTO @results(description)
SELECT TOP 5 MenuItemDescriptionText
FROM MenuItem
WHERE MenuItemID = @MenuItemID
RETURN
END
但是,当您使用MenuItemID
时,您将只获得一个结果,因为这是您的主键。我想你想要的是根据MenuID
选择,这是该表中的FK。如果你真的想通过MenuItemID,那么你可以SELECT MenuItemDescriptionText FROM MenuItem WHERE MenuItemID = @MenuItemID
这是一个非常简单的查询,它不值得一个功能。