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 )
스칼라 함수의 경우 함수 본문이 다음 구조에 포함됩니다.
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 ('测试','China', 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!