Heim  >  Artikel  >  Backend-Entwicklung  >  php: Detaillierte Erläuterung der benutzerdefinierten Funktionstypen von SQL Server

php: Detaillierte Erläuterung der benutzerdefinierten Funktionstypen von SQL Server

伊谢尔伦
伊谢尔伦Original
2017-06-26 09:16:541857Durchsuche

In Bezug auf benutzerdefinierte SQL Server-Funktionen gibt es zwei Typen: Skalarfunktionen und Tabellenwertfunktionen (Inline-Tabellenwertfunktionen, Tabellenwertfunktionen mit mehreren Anweisungen).

Abgesehen davon wissen einige Freunde möglicherweise nicht, wo benutzerdefinierte SQL Server-Funktionen geschrieben werden sollen. Hier ist eine kurze Erinnerung: Erweitern Sie die spezifischen Anforderungen eine Datenbank mit SQL Server-Benutzer benutzerdefinierte Funktion (d. h. jede benutzerdefinierte Funktion ist nur für eine bestimmte Datenbank nützlich), suchen Sie dann die Option Programmierbarkeit, erweitern Sie sie und suchen Sie nach Funktion Option: In den spezifischen Funktionsoptionen können Sie mit der rechten Maustaste klicken und „Hinzufügen“ auswählen, wie in der Abbildung unten gezeigt.

Die sogenannte SkalarfunktionEinfach ausgedrückt ist das zurückgegebene Ergebnis nur ein Skalar For mir, Das zurückgegebene Ergebnis ist ein Wert eines Typs.

ist wie folgt geschrieben:

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

Off-Topic : Werfen wir einen Blick auf den obigen Text Methode. Für SQL Server Im Allgemeinen verwenden wir den Variablennamen @, und im Vergleich zur Programmierung ist die Art und Weise, wie SQL Server deklariert, für uns ein Witz ist zuerst die Variable und dann der Typ. Die Methode, Parameter zu übergeben oder nicht, ist tatsächlich dieselbe wie unsere Programmiermethode. Wenn Parameter vorhanden sind, lautet die Methode wie folgt:

Wenn keine Parameter vorhanden sind, behalten Sie einfach die Klammern bei. Es steht im Einklang mit unserem Verständnis des Funktionsschreibens.
CREATE FUNCTION GetSum
(
    @firstNum int,
    @secondNum int
)

Die Rückgabemethode unterscheidet sich von der Art und Weise, wie wir programmieren. Der Rückgabetyp der SQL Server-Funktion steht nicht vor dem Funktionsnamen, sondern hinter den Klammern des Funktionsnamens. Darüber hinaus muss der Rückgabetyp der Funktion das Rückgabeschlüsselwort
CREATE FUNCTION GetSum
(
)
RETURNS

anstelle von RETURN verwenden. Für Funktionen gibt es natürlich auch einen sogenannten Funktionskörper. Das Gleiche gilt für Skalarfunktionen. Sein Funktionskörper ist enthalten in:

Wenn Sie Variablen im Funktionskörper deklarieren müssen, müssen Sie zum Deklarieren das Schlüsselwort
AS
BEGIN
    -- 函数体
END
DECLARE

verwenden. Die Rückgabe im Funktionskörper ist das Schlüsselwort RETURN. Okay, wir haben die Beispiele für Skalarfunktionen fertiggestellt. Um sie in der Datenbank zu speichern, müssen Sie im Microsoft SQL Server Management Studio-Tool auf

klicken, um den Vorgang

auszuführen. Anschließend können Sie die Ergebnisse im Fenster Abfrage abfragen, genau wie Tabellendaten abfragen. Die Verwendung von ist leicht zu verstehen, es sollte jedoch beachtet werden, dass der Name des

-Objekts

[dbo] nicht weggelassen werden darf und () nach [GetSum] nicht weggelassen werden sollte. Funktion. Seltsamerweise kann bei Tabellenwertfunktionen der Objektname [dbo] korrekt ausgeführt werden, ohne ihn zu schreiben.

select [dbo].[GetSum]()
Im Vergleich zu Skalarfunktionen, die nur einen Skalarwert zurückgeben, geben Inline-Tabellenwertfunktionen Tabellendaten zurück. Natürlich sind Tabellendaten vom Tabellentyp.

wird wie folgt geschrieben:

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
)
Exkurs:

Skalarfunktion Der oben genannte Inhalt wird hier nicht wiederholt. Die von der Inline-Tabellenfunktion zurückgegebene Tabellenstruktur wird durch die SELECT-Anweisung im Funktionskörper bestimmt.
Bei Skalarfunktionen ist der Funktionskörper in der folgenden Struktur enthalten.

Aber für Inline-Tabellenwertfunktionen ist die Struktur des Funktionskörpers wie folgt. Inline-Tabellenwertfunktionen führen nur eine SQL-Anweisung aus und geben das Tabellenergebnis zurück.
AS
BEGIN
    -- 函数体
END

Die Art und Weise, Tabellenwertfunktionen auszuführen, ist wie folgt:
AS
RETURN
    -- 函数体
END

Es ist ersichtlich, dass diese Ausführungsmethode mit der Ausführungsmethode gewöhnlicher Tabellen identisch ist. Tabellenwertfunktionen entsprechen tatsächlich einer im Speicherbereich gespeicherten virtuellen Tabelle.
select [FName],[FCity],[FAge],[FSalary] from [dbo].[GetMoreThanSalary](8000)

Tabellenwertfunktionen mit mehreren Anweisungen und Inline-Tabellenwertfunktionen sind beide Tabellenwertfunktionen, und die von ihnen zurückgegebenen Ergebnisse sind alle vom Typ „Tabelle“. Wie der Name schon sagt, kann die Tabellenwertfunktion mit mehreren Anweisungen Tabellendaten über mehrere Anweisungen erstellen. Dies unterscheidet sich von der Inline-Tabellenwertfunktion. Das Rückgabeergebnis der Inline-Tabellenwertfunktion wird durch die SELECT-Anweisung im Funktionskörper bestimmt. Tabellenwertfunktionen mit mehreren Anweisungen erfordern die Angabe einer bestimmten Tabellentypstruktur. Mit anderen Worten: Die zurückgegebene Tabelle hat bereits definiert, welche Felder zurückgegeben werden sollen. Daher kann die Ausführung mehrerer Anweisungen zum Erstellen von Tabellendaten unterstützt werden.

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>
)

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

Das obige ist der detaillierte Inhalt vonphp: Detaillierte Erläuterung der benutzerdefinierten Funktionstypen von SQL Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn