SQL 服务器:无法从 table 值函数中执行现有标量函数
SQL Server: Cannot execute existing scalar function from within table-valued function
我创建了这个标量函数,没有任何问题。
但我无法从另一个函数(内联 table 值)执行它。
USE [test]
GO
/****** Object: UserDefinedFunction [dbo].[NameFromEnumerationID] Script Date: 10/9/2018 6:46:22 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[NameFromEnumerationID]
(
@EnumerationIDParam INT NOT NULL
)
RETURNS NVARCHAR ( 48 )
WITH NATIVE_COMPILATION ,
SCHEMABINDING
AS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT ,
LANGUAGE = N'English' )
RETURN CHOOSE ( @EnumerationIDParam ,
CAST ( N'ExampleName1' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName2' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName3' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName4' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName5' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName6' AS NVARCHAR ( 48 ) ) ) ;
END
GO
当我尝试创建另一个执行上述函数的函数时,我收到错误消息:
'NameFromEnumerationID' is not a recognized built-in function name.
CREATE FUNCTION [dbo].[NamesFromEnumerationIDs]
(
@EnumerationIDListParam [IntList] NOT NULL READONLY
)
RETURNS TABLE AS RETURN
(
SELECT [Value] AS [ID] ,
/* ERROR */ NameFromEnumerationID ( [Value] ) AS [EnumerationName] ,
UPPER ( [NameFromEnumerationID] ( [Value] ) ) AS [EnumerationNameUpper] ,
[IsEnumerationIDValid] ( [Value] ) AS [IsValid]
FROM @EnumerationIDListParam
)
GO
第二个函数的参数,IntList
类型很简单:
USE [test]
GO
/****** Object: UserDefinedTableType [dbo].[IntList] Script Date: 10/9/2018 6:55:56 AM ******/
CREATE TYPE [dbo].[IntList] AS TABLE(
[Value] [int] NOT NULL
)
GO
如何在第二个函数中执行第一个函数作为查询的一部分?
添加架构名称:dbo.NameFromEnumerationID( [Value] )
dba.stackexchange.com: Why is the schema prefix (dbo) mandatory when we call a function?
我创建了这个标量函数,没有任何问题。
但我无法从另一个函数(内联 table 值)执行它。
USE [test]
GO
/****** Object: UserDefinedFunction [dbo].[NameFromEnumerationID] Script Date: 10/9/2018 6:46:22 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[NameFromEnumerationID]
(
@EnumerationIDParam INT NOT NULL
)
RETURNS NVARCHAR ( 48 )
WITH NATIVE_COMPILATION ,
SCHEMABINDING
AS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT ,
LANGUAGE = N'English' )
RETURN CHOOSE ( @EnumerationIDParam ,
CAST ( N'ExampleName1' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName2' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName3' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName4' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName5' AS NVARCHAR ( 48 ) ) ,
CAST ( N'ExampleName6' AS NVARCHAR ( 48 ) ) ) ;
END
GO
当我尝试创建另一个执行上述函数的函数时,我收到错误消息:
'NameFromEnumerationID' is not a recognized built-in function name.
CREATE FUNCTION [dbo].[NamesFromEnumerationIDs]
(
@EnumerationIDListParam [IntList] NOT NULL READONLY
)
RETURNS TABLE AS RETURN
(
SELECT [Value] AS [ID] ,
/* ERROR */ NameFromEnumerationID ( [Value] ) AS [EnumerationName] ,
UPPER ( [NameFromEnumerationID] ( [Value] ) ) AS [EnumerationNameUpper] ,
[IsEnumerationIDValid] ( [Value] ) AS [IsValid]
FROM @EnumerationIDListParam
)
GO
第二个函数的参数,IntList
类型很简单:
USE [test]
GO
/****** Object: UserDefinedTableType [dbo].[IntList] Script Date: 10/9/2018 6:55:56 AM ******/
CREATE TYPE [dbo].[IntList] AS TABLE(
[Value] [int] NOT NULL
)
GO
如何在第二个函数中执行第一个函数作为查询的一部分?
添加架构名称:dbo.NameFromEnumerationID( [Value] )
dba.stackexchange.com: Why is the schema prefix (dbo) mandatory when we call a function?