>백엔드 개발 >PHP 튜토리얼 >php: SQL Server 사용자 정의 함수 유형에 대한 자세한 설명

php: SQL Server 사용자 정의 함수 유형에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-26 09:16:541893검색

SQL Server 사용자 정의 함수에는 스칼라 함수와 테이블 반환 함수(인라인 테이블 반환 함수, 다중 문 테이블 반환 함수)라는 두 가지 유형이 있습니다.

주제에서 벗어나, 일부 친구들은 SQL Server 사용자 정의 함수를 어디에 작성해야 하는지 모를 수도 있습니다. 다음은 Microsoft SQL Server Management Studio에서 SQL Server 사용자사용자 정의 함수 데이터베이스를 생성해야 하는 특정 요구 사항을 확장하는 것입니다. (즉, 각 사용자 정의 함수는 특정 데이터베이스에만 유용합니다.) Programmability 옵션을 찾은 다음 확장하여 Function 옵션을 찾으려면 에서 마우스 버튼을 참조하세요. 아래 그림을 마우스 오른쪽 버튼으로 클릭하고 선택하여 추가하세요.

소위 스칼라 함수간단히 말하면 반환된 결과는 단지 스칼라일 뿐입니다. 나에게 반환된 결과는 유형의 값입니다.

은 다음과 같이 작성됩니다.

CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> 
(
    -- Add the parameters for the function here
    <@Param1, sysname, @p1> <Data_Type_For_Param1, , int>
)
RETURNS <Function_Data_Type, ,int>
AS
BEGIN
    -- Declare the return variable here
    DECLARE <@ResultVar, sysname, @Result> <Function_Data_Type, ,int>

    -- Add the T-SQL statements to compute the return value here
    SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>

    -- Return the result of the function
    RETURN <@ResultVar, sysname, @Result>
CREATE FUNCTION GetSum
(
    @firstNum int,
    @secondNum int
)
RETURNS int
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result int

    -- Add the T-SQL statements to compute the return value here
    SELECT @result=@firstNum+@secondNum

    -- Return the result of the function
    RETURN @result

여담: 위의 작성을 살펴보겠습니다. SQLServer의 경우 변수를 선언하는 방법은 @변수 이름을 사용하는 것이며 프로그래밍과 관련됩니다. 말하자면, SQL Server가 선언하는 방식은 우리에게 농담입니다. 먼저 변수이고 그 다음이 유형입니다. 매개변수를 전달하거나 전달하지 않는 방법은 실제로 프로그래밍 방법과 동일합니다. 매개변수가 있는 경우 방법은 다음과 같습니다.

CREATE FUNCTION GetSum
(
    @firstNum int,
    @secondNum int
)

매개변수가 없으면 괄호만 유지하세요. 이는 함수 작성에 대한 우리의 이해와 일치합니다.

CREATE FUNCTION GetSum
(
)

반품 방법은 저희가 프로그래밍한 방식과 다릅니다. SQL Server 함수의 반환 유형은 함수 이름 앞이 아니라 함수 이름 대괄호 뒤에 배치됩니다. 그리고 함수의 반환 유형은 RETURN 대신 반환 키워드 RETURN를 사용해야 합니다.

함수에는 물론 소위 함수 본체(Function Body)라는 것도 있습니다. 스칼라 함수도 마찬가지입니다. 함수 본문은 다음에 포함되어 있습니다.

AS
BEGIN
    -- 函数体
END

함수 본문에서 변수를 선언해야 하는 경우 DECLARE 키워드를 사용하여 선언해야 합니다. 함수 본문의 반환은 RETURN 키워드입니다.

알겠습니다. 스칼라 함수의 예를 모두 제공했습니다. 이를 데이터베이스에 저장하려면 Microsoft SQL Server Management Studio 도구에서 를 클릭하여 작업을 수행해야 합니다. 이후에는 쿼리 테이블 데이터와 마찬가지로 Query 창에서 결과를 쿼리할 수 있습니다.

사용법은 이해하기 쉽지만, object[dbo]의 이름은 생략할 수 없으며, [GetSum] 함수 뒤에 ()가 빠지면 ​​안 된다는 점에 유의하세요. 이상하게도 테이블 반환 함수의 경우 개체 이름 [dbo]를 쓰지 않고도 올바르게 실행할 수 있습니다.

select [dbo].[GetSum]()

스칼라 값만 반환하는 스칼라 함수와 비교하여 인라인 테이블 반환 함수는 테이블 데이터를 반환합니다. 물론 테이블 데이터는 Table 형태이다.

는 다음과 같이 작성됩니다:

CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName> 
(    
    -- Add the parameters for the function here
    <@param1, sysname, @p1> <Data_Type_For_Param1, , int>, 
    <@param2, sysname, @p2> <Data_Type_For_Param2, , char>
)
RETURNS TABLE 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references here
    SELECT 0
)
GO
CREATE FUNCTION [GetMoreThanSalary]
(    
    @salary int
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT [FName],[FCity],[FAge],[FSalary] FROM [Demo].[dbo].[T_Person] Where [FSalary] > @salary
)

여담: Scalar 함수 위에서 언급한 내용은 여기서 반복되지 않습니다. 인라인 테이블 함수에서 반환된 테이블 구조는 함수 본문의 SELECT 문에 의해 결정됩니다.

스칼라 함수의 경우 함수 본문이 다음 구조에 포함됩니다.

AS
BEGIN
    -- 函数体
END

하지만 인라인 테이블 반환 함수의 경우 함수 본문의 구조는 다음과 같습니다. 인라인 테이블 반환 함수는 하나의 SQL 문만 실행하고 테이블 결과를 반환합니다.

AS
RETURN
    -- 函数体
END

테이블 값 함수를 실행하는 방법은 다음과 같습니다.

select [FName],[FCity],[FAge],[FSalary] from [dbo].[GetMoreThanSalary](8000)

이 실행 방법은 일반 테이블의 실행 방법과 동일하다고 볼 수 있습니다. 테이블 반환 함수는 실제로 메모리 공간에 저장된 가상 테이블과 동일합니다.

다중 문 테이블 반환 함수와 인라인 테이블 반환 함수는 모두 테이블 반환 함수이며 반환되는 결과는 모두 테이블 유형입니다. 이름에서 알 수 있듯이 다중 문 테이블 반환 함수는 여러 문을 통해 테이블 ​​유형 데이터를 생성할 수 있습니다. 이는 인라인 테이블 반환 함수와 다릅니다. 인라인 테이블 반환 함수의 반환 결과는 함수 본문의 SELECT 문에 의해 결정됩니다. 다중 문 테이블 반환 함수를 사용하려면 특정 테이블 유형 구조를 지정해야 합니다. 즉, 반환된 테이블에는 반환할 필드가 이미 정의되어 있습니다. 따라서 테이블 데이터를 생성하기 위해 여러 명령문의 실행을 지원할 수 있습니다.

CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> 
(
    -- Add the parameters for the function here
    <@param1, sysname, @p1> <data_type_for_param1, , int>, 
    <@param2, sysname, @p2> <data_type_for_param2, , char>
)
RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
    <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
    <Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)
AS
BEGIN
    -- Fill the table variable with the rows for your result set
    
    RETURN 
END
GO
ALTER FUNCTION DemoFun
(

)
RETURNS 
@result TABLE 
(
    name nvarchar(20),
    city nvarchar(20),
    age int,
    salary int
)
AS
BEGIN
    -- Fill the table variable with the rows for your result set
    insert into @result(name, city, age, salary)
    select FName,FCity,FAge,FSalary from dbo.T_Person where FSalary>8000
    insert into @result(name, city, age, salary) values
    (&#39;测试&#39;,&#39;China&#39;, 1, 0)
    RETURN 
END
GO

题外话:可以看得出,多语句表值函数的返回结果是定义好表结构的虚拟表。这又跟标量函数一样了吧,只不过标量函数是返回一种类型的标量值而已。而且在多语句表值函数里面,你也会发现最后一句是RETURN。告诉执行程序,多语句表值函数已经执行完成。函数体结构跟标量函数的结构一样。对于类型放在变量后面这种方式确实需要好好转换一下观念。

RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here
    <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
    <Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)

内容倒是不多,但是要熟练使用的话,还是需要在项目中多加使用才行。网上有一些网友总结出来的常用自定义函数大家可以收集积累,就像做项目一样,好的方法要形成所谓的开发库,帮助我们在下一个项目中复用。节省我们的开发时间,提高我们的工作效率。

위 내용은 php: SQL Server 사용자 정의 함수 유형에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.