Heim > php教程 > PHP开发 > Hauptteil

Zusammenfassung der gespeicherten SQL-Prozedur

高洛峰
Freigeben: 2016-12-14 15:21:16
Original
1633 Leute haben es durchsucht

1. Übersicht über gespeicherte SQL-Prozeduren

In großen Datenbanksystemen spielen gespeicherte Prozeduren und Trigger eine wichtige Rolle. Unabhängig davon, ob es sich um eine gespeicherte Prozedur oder einen Trigger handelt, handelt es sich um eine Sammlung von SQL-Anweisungen und Flusskontrollanweisungen. Im Wesentlichen ist ein Trigger auch eine gespeicherte Prozedur. Gespeicherte Prozeduren generieren während des Betriebs Ausführungsmodi, sodass sie bei späterer erneuter Ausführung sehr schnell ausgeführt werden. SQL Server 2000 bietet nicht nur die Funktion benutzerdefinierter gespeicherter Prozeduren, sondern auch viele gespeicherte Systemprozeduren, die als Tools verwendet werden können

1.1 Konzepte

Gespeicherte Prozeduren (Gespeicherte Prozedur) ist eine Reihe von SQL-Anweisungen zum Ausführen bestimmter Funktionen, die kompiliert und in der Datenbank gespeichert werden. Der Benutzer führt eine gespeicherte Prozedur aus, indem er ihren Namen angibt und Parameter angibt (sofern die gespeicherte Prozedur über Parameter verfügt).

In den Serienversionen von SQL Server werden gespeicherte Prozeduren in zwei Kategorien unterteilt: vom System bereitgestellte gespeicherte Prozeduren und benutzerdefinierte gespeicherte Prozeduren. Systemprozeduren werden hauptsächlich in der Masterdatenbank gespeichert und mit dem Präfix sp_ versehen. Gespeicherte Systemprozeduren beziehen hauptsächlich Informationen aus Systemtabellen und bieten so Systemadministratoren Unterstützung bei der Verwaltung von SQL Server. Durch gespeicherte Systemprozeduren können viele Verwaltungs- oder Informationsaktivitäten in MS SQL Server (z. B. das Verstehen von Datenbankobjekten und Datenbankinformationen) reibungslos und effektiv ausgeführt werden. Obwohl diese gespeicherten Systemprozeduren in der Masterdatenbank abgelegt werden, können sie dennoch in anderen Datenbanken aufgerufen werden, ohne dass dem Datenbanknamen der Name der gespeicherten Prozedur vorangestellt wird. Und wenn eine neue Datenbank erstellt wird, werden einige gespeicherte Systemprozeduren automatisch in der neuen Datenbank erstellt. Eine benutzerdefinierte gespeicherte Prozedur ist eine vom Benutzer erstellte gespeicherte Prozedur, die eine bestimmte Funktion ausführen kann (z. B. die Abfrage der vom Benutzer benötigten Dateninformationen). Die in diesem Kapitel erwähnten gespeicherten Prozeduren beziehen sich hauptsächlich auf benutzerdefinierte gespeicherte Prozeduren.

1.2 Vorteile gespeicherter Prozeduren

Transaction-SQL ist eine primäre Programmiersprache beim Erstellen einer Anwendung mit MS SQL Server. Wenn Sie Transaction-SQL zum Programmieren verwenden, gibt es zwei Methoden. Eine besteht darin, das Transaction-SQL-Programm lokal zu speichern und eine Anwendung zu erstellen, um Befehle an SQL Server zu senden, um die Ergebnisse zu verarbeiten. Zweitens können Sie einige in Transaction-SQL geschriebene Programme als gespeicherte Prozeduren in SQL Server speichern und Anwendungen erstellen, um die gespeicherten Prozeduren aufzurufen und die Datenergebnisse zu verarbeiten. Die gespeicherten Prozeduren können die Ergebnismenge durch den Empfang von Parametern an den Aufrufer zurückgeben. Das Format der Ergebnismenge wird vom Aufrufer bestimmt; er gibt einen Statuswert an den Aufrufer zurück, der angibt, ob der Aufruf erfolgreich ist oder fehlgeschlagen ist, und kann eine andere gespeicherte Prozedur in einer gespeicherten Prozedur aufrufen.

Wir bevorzugen normalerweise die zweite Methode, die darin besteht, eine gespeicherte Prozedur in SQL Server zu verwenden, anstatt ein in Transaction-SQL geschriebenes Programm auf dem Clientcomputer aufzurufen, da die gespeicherte Prozedur die folgenden Vorteile hat:
1) Gespeicherte Prozeduren ermöglichen die Programmierung von Standardkomponenten

Nachdem eine gespeicherte Prozedur erstellt wurde, kann sie im Programm mehrmals aufgerufen werden, ohne dass die SQL-Anweisung der gespeicherten Prozedur neu geschrieben werden muss. Darüber hinaus können Datenbankexperten die gespeicherte Prozedur jederzeit ändern, dies hat jedoch keine Auswirkungen auf den Quellcode der Anwendung (da der Quellcode der Anwendung nur die Aufrufanweisungen der gespeicherten Prozedur enthält), wodurch die Portabilität des Programms erheblich verbessert wird.

(2) Gespeicherte Prozeduren können eine schnellere Ausführungsgeschwindigkeit erreichen

Wenn eine Operation eine große Menge an Transaktions-SQL-Code enthält oder mehrmals ausgeführt wird, sind gespeicherte Prozeduren schneller als die Stapelverarbeitung ist viel schneller. Da gespeicherte Prozeduren vorkompiliert sind, analysiert und optimiert das Abfrageoptimierungsprogramm eine gespeicherte Prozedur, wenn sie zum ersten Mal ausgeführt wird, und erstellt einen Ausführungsplan, der schließlich in der Systemtabelle gespeichert wird. Batch-Transaktions-SQL-Anweisungen müssen bei jeder Ausführung kompiliert und optimiert werden, daher ist die Geschwindigkeit relativ langsamer.

(3) Gespeicherte Prozeduren können den Netzwerkverkehr reduzieren

Für denselben Vorgang (z. B. Abfrage, Änderung) am Datenbankobjekt, wenn die an diesem Vorgang beteiligte Transaction-SQL-Anweisung organisiert ist Bei einer gespeicherten Prozedur wird dann, wenn die gespeicherte Prozedur auf dem Clientcomputer aufgerufen wird, nur die aufrufende Anweisung im Netzwerk übertragen, andernfalls handelt es sich um mehrere SQL-Anweisungen, wodurch der Netzwerkverkehr erheblich erhöht und die Netzwerklast verringert wird.

(4) Gespeicherte Prozeduren können vollständig als Sicherheitsmechanismus genutzt werden

Systemadministratoren können den Zugriff auf die entsprechenden Daten einschränken, indem sie die Berechtigungen zum Ausführen einer bestimmten gespeicherten Prozedur einschränken. Berechtigungsbeschränkungen verhindern, dass nicht autorisierte Benutzer den Zugriff auf Daten zu verhindern und die Datensicherheit zu gewährleisten. (Eine klarere Einführung in diese Anwendung gespeicherter Prozeduren geben wir in Kapitel 14 „Benutzer- und Sicherheitsverwaltung von SQL Server“)

Hinweis: Obwohl gespeicherte Prozeduren sowohl Parameter als auch Rückgabewerte haben, unterscheiden sie sich von Funktionen. Der Rückgabewert einer gespeicherten Prozedur gibt nur an, ob die Ausführung erfolgreich ist, und kann nicht wie eine Funktion direkt aufgerufen werden. Das heißt, beim Aufruf einer gespeicherten Prozedur muss das reservierte Wort EXEC vor dem Namen der gespeicherten Prozedur stehen.

2. Grundlegende Syntax 2.1 Erstellen Sie eine gespeicherte Prozedur

Prozedur erstellen sp_name //sp_name Der Name, den Sie der gespeicherten Prozedur geben

Beginn

......

Ende

Name der gespeicherten Prozedur erstellen
Parameter der gespeicherten Prozedur
AS
Ausführungsanweisung
RETURN
Gespeicherte Prozedur ausführen
GO

Beispiel:

-- Die Datenbank, in der die gespeicherte Prozedur erstellt werden soll

Test verwenden

-- Bestimmen Sie, ob der zu erstellende Name der gespeicherten Prozedur vorhanden ist

if Exists(Name aus sysobjects auswählen, wobei name='csp_AddInfo' und


type='P')

-- Gespeicherte Prozedur löschen

Drop Procedure dbo .csp_AddInfo

Los

-- Gespeicherte Prozedur erstellen

Proc dbo erstellen .csp_AddInfo

- - Gespeicherte Prozedurparameter

@UserName varchar(16),

@Pwd varchar(50),

@Age smallint,

@*** varchar(6)

AS

-- Anweisungskörper der gespeicherten Prozedur

in Uname einfügen (Benutzername, Passwort, Alter,** *)

Werte (@UserName,@Pwd,@Age,@***)

RETURN

-- Ausführen

GO

--Gespeicherte Prozedur ausführen

EXEC csp_AddInfo 'Junn.A','123456',20,'Male'

The Name der neuen gespeicherten Prozedur. Prozedurnamen müssen den Regeln für Bezeichner entsprechen und für die Datenbank und ihren Eigentümer eindeutig sein.
Um eine lokale temporäre Prozedur zu erstellen, können Sie vor procedure_name ein Zahlenzeichen (##procedure_name) hinzufügen. Um eine globale temporäre Prozedur zu erstellen, können Sie vor procedure_name zwei Zahlenzeichen (##procedure_name) hinzufügen. Der vollständige Name (einschließlich # oder ##) darf 128 Zeichen nicht überschreiten. Die Angabe des Namens des Prozesseigentümers ist optional.

2.2 Gespeicherte Prozedur aufrufen

Prozedur sp-name () aufrufen

Hinweis: Nach der gespeicherten Prozedur müssen Klammern hinzugefügt werden Prozedurname, auch wenn für die gespeicherte Prozedur keine Parameter übergeben wurden

1) Die erste Methode: Ausgabeparameter verwenden

USE AdventureWorks;

GO

IF OBJECT_ID ( 'Production.usp_GetList', 'P' ) IS NOT NULL

DROP PROCEDURE Production.usp_GetList;

GO


CREATE PROCEDURE Production.usp_GetList

@product varchar(40)

, @maxprice Money

, @compareprice Money OUTPUT

, @listprice money OUT

AS

SELECT p.name AS Product, p.ListPrice AS 'List Price'

FROM Production.Product p

JOIN Production.ProductSubcategory s

ON p.ProductSubcategoryID = s.ProductSubcategoryID

WHERE s.name LIKE @product AND p.ListPrice < @maxprice;

- - Füllen Sie die Ausgabevariable @listprice.

SET @listprice = (SELECT MAX(p.ListPrice)

FROM Production.Product p

JOIN Production.ProductSubcategory s

ON p.ProductSubcategoryID = s.ProductSubcategoryID

WHERE s.name LIKE @product AND p.ListPrice < @maxprice);

-- Füllen Sie die Ausgabevariable aus @compareprice.

SET @compareprice = @maxprice;

GO



--anders gespeicherte Prozedur Beim Aufruf:

Proc-Test erstellen

als

DECLARE @compareprice Money, @cost Money

EXECUTE Production.usp_GetList '%Bikes%' , 700,

@compareprice OUT,

@cost OUTPUT

WENN @cost <= @compareprice

BEGIN

DRUCKEN ' Diese Produkte können für weniger als

$'+RTRIM(CAST(@compareprice AS varchar(20)))+'.'

END

ELSE< gekauft werden 🎜 >

PRINT 'Die Preise für alle Produkte in dieser Kategorie überschreiten

$'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.'


2) Zweite Methode: Erstellen Sie eine temporäre Tabelle

create proc GetUserName

as
begin
select 'UserName'
end

Tabelle #tempTable (Benutzername nvarchar(50)) erstellen

in #tempTable(Benutzername) einfügen
exec GetUserName

#tempTable auswählen

-- Danach Verwenden Sie die temporäre Tabelle, löschen Sie sie.

Tabelle löschen #tempTable – Es ist zu beachten, dass diese Methode nicht verschachtelt werden kann. Zum Beispiel:

prozedur a

begin
...
insert #table exec b
end

prozedur b
begin
.. .
insert #table exec c
select * from #table
end

procedure c
begin
...
select * from sometable
end

--Hier passt a die Ergebnismenge von b an, und es gibt auch eine solche Anwendung in b, die die Ergebnismenge von c anpasst.

--„INSERT EXEC-Anweisung nicht.“ verschachtelt sein“ wird als „Fehler“ gemeldet. Diese Art der Anwendung sollte in tatsächlichen Anwendungen vermieden werden.

3) Die dritte Methode: Deklarieren Sie eine Variable und führen Sie sie mit exec(@sql) aus:

2.3 Gespeicherte Prozedur löschen,

Prozedur sp_name löschen//

Hinweis: Sie können keine andere gespeicherte Prozedur innerhalb einer gespeicherten Prozedur löschen, Sie können nur eine andere gespeicherte Prozedur aufrufen

2.4 Informationen zu gespeicherten Prozeduren anzeigen

1.Prozedurstatus anzeigen
Zeigen Sie die grundlegenden Informationen aller gespeicherten Prozeduren in der Datenbank an, einschließlich der Datenbank, zu der sie gehört, des Namens der gespeicherten Prozedur, der Erstellungszeit usw.

2.show create procedure sp_name
Anzeige die detaillierten Informationen einer bestimmten gespeicherten MySQL-Prozedur

2.5 Kommentare

Gespeicherte MySQL-Prozeduren können zwei Arten von Kommentaren verwenden
Doppelte horizontale Balken: --

Dieser Stil wird im Allgemeinen für einzeilige Kommentare verwendet
c-Stil: /* Kommentarinhalt */ Wird im Allgemeinen für mehrzeilige Kommentare verwendet

2.6 Schleifenanweisung 2.6.1 If

IF-Bedingung

BEGIN
​​​​Ausführungsanweisung
END

ELSE

BEGIN
Ausführungsanweisung
END

WENN @d = 1

BEGIN

-- PRINT
PRINT 'Richtig'
END
ELSE BEGIN
PRINT 'Falsch'
ENDE

2.6.2 Auswahlanweisung mit mehreren Bedingungen

Auswahlanweisung mit mehreren Bedingungen in SQL.


DECLARE @ iRet INT, @PKDisp VARCHAR(20)
SET @iRet = 1
Select @iRet =
CASE
WHEN @ PKDisp = '一' DANN 1
WANN @PKDisp = '二' DANN 2
WANN @PKDisp = 'drei' DANN 3
WANN @PKDisp = 'vier' DANN 4
WANN @PKDisp = 'fünf' DANN 5
ELSE 100
ENDE

2.6.3 Schleifenanweisung


WHILE-Bedingung BEGIN
Ausführungsanweisung
END


Beispiel: CREATE PROCEDURE [dbo].[P_TestWhilr]

as

DECLARE @i INT

SET @i = 1

WHILE @i<1000000 BEGIN

set @i=@i+1

ENDE

--Print

PRINT @i


exec [dbo].[P_TestWhilr]

3. Parametervariablen 3.1 Variablen und Definitionen



Benutzerdefinierte Variable: DECLARE a INT; a=100; DECLARE a INT DEFAULT 100;

Variablen werden in Benutzervariablen und Systemvariablen unterteilt. Variablen, Systemvariablen werden in Variablen auf Sitzungs- und globaler Ebene unterteilt

Benutzervariablen: Benutzervariablennamen beginnen im Allgemeinen mit @ . Der Missbrauch von Benutzervariablen macht das Programm schwer zu verstehen und zu verwalten.

--Deklaration von Variablen: Wenn Sie eine Variable in SQL deklarieren, müssen Sie das @-Symbol vor der Variablen hinzufügen
DECLARE @. I INT

-- Zuweisung von Variablen, beim Zuweisen einer Variablen müssen Sie set hinzufügen
SET @I = 30

--Mehrere Variablen deklarieren
DECLARE @s varchar( 10),@a INT

3.2 Operatoren 3.2.1 Arithmetische Operatoren

+ SET var1=2+2 hinzufügen; 4
- SET var2=3 subtrahieren -2; 1
* Multiplizieren Sie SET var3=3*2; 6
/ Dividieren Sie SET var4=10/3; =10%3; 1

3.2.2 Vergleichsoperator

> Größer als 1>2 Falsch

< Falsch
<= Kleiner oder gleich 2<=2 Wahr
>= Größer als oder gleich 3>=2 Wahr
ZWISCHEN Zwischen zwei Werten 5 ZWISCHEN 1 UND 10 Wahr
NOT BETWEEN Nicht zwischen zwei Werten 5 NOT BETWEEN 1 AND 10 False
IN In der Menge 5 IN (1,2,3,4) False
NOT IN ist nicht in der Menge 5 NOT IN (1 ,2,3,4) Wahr
= ist gleich 2=3 Falsch
<>, != ist ungleich 2<>3 Falsch
< ;=> NULL-Werte für Gleichheit NULL<=>NULL True
LIKE Einfache Musterübereinstimmung mit „Guy Harrison“ LIKE „Guy%“ True
REGEXP Regulärer Ausdruck, der mit „Guy Harrison“ übereinstimmt REGEXP „[ Gg]reg“ False
IS NULL ist leer 0 IS NULL False
IS NOT NULL ist nicht leer 0 IS NOT NULL True

4. Bitoperatoren

| 🎜>& und

<< Rechtsverschiebung

~ Nicht (unäre Operation, bitweise Negation)



4 Ausgabe (unbekannt)

Die Parameter der gespeicherten MySQL-Prozedur werden bei der Definition gespeicherter Prozeduren verwendet. Es gibt drei Parametertypen: IN, OUT, INOUT
Prozedur erstellen |function([[IN |OUT | INOUT ] Parametername Datentyp...])

IN-Eingabeparameter

gibt an, dass der Wert des Parameters beim Aufruf der gespeicherten Prozedur angegeben werden muss Der geänderte Wert dieses Parameters kann nicht zurückgegeben werden, ist dies der Standardwert

OUT-Ausgabeparameter

Der Wert kann innerhalb der gespeicherten Prozedur geändert und zurückgegeben werden

INOUT-Eingabe- und Ausgabeparameter

Wird angegeben, wenn aufgerufen und kann geändert und zurückgegeben werden



--Erstellen Sie eine gespeicherte Prozedur, um den Maximalwert zu finden

CREATE PROCEDURE [dbo].[P_Max]

@a int, -- input

@b int, -- input

@Returnc int output --output

AS

if (@a>@b)

set @Returnc =@a

else

set @Returnc =@b

-- Aufruf

deklariere @Returnc int

exec P_Max 2,3,@Returnc-Ausgabe

wähle @Returnc


5. Funktionsbibliothek

Zu den Grundfunktionen gespeicherter MySQL-Prozeduren gehören: Zeichenfolgentyp, numerischer Typ, Datumstyp

5.1 Zeichenfolge class


CHARSET(str) //String-Zeichensatz zurückgeben
CONCAT (string2 [,… ]) //Verbindungsstring
INSTR (string, substring) // Gibt die Position zurück, an der Teilzeichenfolge erscheint zuerst in Zeichenfolge. Wenn sie nicht vorhanden ist, wird 0 zurückgegeben
LCASE (Zeichenfolge2) //In Kleinbuchstaben konvertieren
LEFT (Zeichenfolge2, Länge) //Längenzeichen von links in Zeichenfolge2 übernehmen
LÄNGE ( string) //String-Länge
LOAD_FILE (Dateiname) //Inhalt aus Datei lesen
LOCATE (substring, string [,start_position]) Wie INSTR, aber die Startposition kann angegeben werden
LPAD (string2, length,pad) //Füge wiederholt pad am Anfang der Zeichenfolge hinzu, bis die Zeichenfolgenlänge length ist
LTRIM (string2) //Führende Leerzeichen entfernen
REPEAT (string2,count) //Anzahl mehrmals wiederholen
REPLACE (str, search_str, replace_str) //Ersetze search_str
RPAD durch replace_str in str (string2, length, pad) //Pad nach str hinzufügen, bis die Länge length
RTRIM (string2) //Backend-Speicherplatz entfernen
STRCMP (string1, string2) //Vergleichen Sie die Größe zweier Zeichenfolgen Zeichen für Zeichen,
SUBSTRING (str, position [,length]) //Beginnen Sie an der Position von str, nehmen Sie Längenzeichen,
Hinweis : Bei der Verarbeitung von Zeichenfolgen in MySQL ist der Standardindex für das erste Zeichen 1, d. h. die Parameterposition muss größer oder gleich 1 sein
mysql> —— —————–+
|. substring('abcd',0,2) |
+———————–+
|. ———— —–+
1 Zeile im Satz (0,00 Sek.)

mysql> –+

|. substring('abcd',1,2) |

+———————–+
+ ab |
+————————–. +
1 Zeile im Satz (0,02 Sek.)

TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //Entferne das angegebene Zeichen an der angegebenen Position
UCASE ( string2) //In Großbuchstaben umwandeln

RIGHT(string2,length) //Letzte Längenzeichen von string2 abrufen

SPACE(count) //Anzahl-Leerzeichen generieren

5.2 Numerischer Typ

ABS (Zahl2) //Absoluter Wert

BIN (Dezimalzahl) //Dezimal zu Binärzahl

CEILING (Zahl2) //Aufrunden

CONV(Zahl2,von_Basis,zu_Basis) //Konvertierung
FLOOR (Zahl2) // Abrunden
FORMAT (Zahl,Dezimalstellen) //Anzahl der Dezimalstellen beibehalten
HEX (Dezimalzahl) //In Hexadezimalzahl umwandeln
Hinweis: Eine Zeichenfolge kann in HEX übergeben werden( ), dann wird sein ASC-11-Code zurückgegeben, z. B. HEX('DEF') gibt 4142143
zurück. Sie können auch eine dezimale Ganzzahl übergeben und deren Hexadezimalcode zurückgeben, z. B. HEX(25) gibt 19LEAST (Zahl, Zahl2 [, ..]) //Finde den Minimalwert
MOD (Zähler,Nenner) //Finde den Rest
POWER (Zahl,Potenz) //Finde den Index
RAND([seed]) //Zufallszahl
ROUND (number [,decimals ]) //Rundung, Dezimalstellen ist die Anzahl der Dezimalstellen]

Hinweis: Nicht alle Rückgabetypen sind Ganzzahlen, wie z :

(1) wird standardmäßig zu einem ganzzahligen Wert

mysql>

+————-+

| ————-+

|. 1 |
+ ————-+
1 Zeile im Satz (0,00 Sek.)

mysql> select round(1.56);
+————-+
|.
+————-+

+————-+

1 Reihe im Satz ( 0,00 Sek.)

(2) Dezimalstellen können festgelegt werden, Anzahl der Stellen, Gleitkommadaten zurückgeben

mysql>+—————— -+
|. rund(1.567,2) |
+ —————-+

|.+—————-+

1 Reihe im Satz (0,00 Sek.)

SIGN (Zahl2) //Rückgabezeichen, positiv oder negativ oder 0
SQRT(Zahl2) //Quadratwurzel

5.3 Datumstyp

ADDTIME (date2 ,time_interval ) //time_interval zu date2 hinzufügen
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //Zeitzone konvertieren
CURRENT_DATE ( ) //Aktuelles Datum
CURRENT_TIME ( ) //Aktuell Zeit
CURRENT_TIMESTAMP ( ) //Aktueller Zeitstempel
DATE (datetime) //Den Datumsteil von datetime zurückgeben
DATE_ADD (date2, INTERVAL d_value d_type) //Datum oder Uhrzeit zu date2 hinzufügen
DATE_FORMAT ( datetime, FormatCodes) //Formatcodes-Format verwenden, um datetime anzuzeigen
DATE_SUB (date2, INTERVAL d_value d_type) //Subtrahiere eine Zeit von date2
DATEDIFF (date1, date2) //Die Differenz zwischen den beiden Daten
DAY (Datum) //Gibt den Tag des Datums zurück
DAYNAME (Datum) //Englischer Wochentag
DAYOFWEEK (Datum) //Wochentag (1-7), 1 ist Sonntag
DAYOFYEAR (Datum) / / Der Tag des Jahres
EXTRACT (interval_name FROM date) //Extrahieren Sie den angegebenen Teil des Datums aus date
MAKEDATE (year, day) //Generieren Sie das Datum anhand des Jahres und des Tages des Jahres String
MAKETIME (Stunde, Minute, Sekunde) //Zeitstring generieren
MONTHNAME (Datum) //Englischer Monatsname
NOW () //Aktuelle Zeit
SEC_TO_TIME (Sekunden) //Anzahl der Sekunden In Zeit umwandeln
STR_TO_DATE (string,format) //String in Zeit umwandeln und im Format anzeigen
TIMEDIFF (datetime1, datetime2) //Differenz zwischen zwei Zeiten
TIME_TO_SEC (time) //Zeit in umwandeln Sekunden Zahl]
WEEK (date_time [,start_of_week ]) //Die Anzahl der Wochen
YEAR (datetime) //Das Jahr
DAYOFMONTH(datetime) //Der Tag des Monats
HOUR( datetime) / /Stunde
LAST_DAY(date) //Das letzte Datum des Monats date
MICROSECOND(datetime) //Mikrosekunden
MONTH(datetime) //Monat
MINUTE(datetime) / /Minute

Hinweis: In INTERVAL verfügbare Typen: DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR
DECLARE variable_name [,variable_name...] Datentyp [ DEFAULT-Wert];
Daunter ist Datentyp der Datentyp von MySQL, wie zum Beispiel: INT, FLOAT, DATE, VARCHAR(Länge)

Beispiel:

DECLARE l_int INT ohne Vorzeichen 4000000; 🎜>
6. Anwendung gespeicherter Prozeduren




SQL-gespeicherte Prozedur Paging-Methode:

Gespeicherte Prozedur:

CREATE procedure p_splitpage

@sql nvarchar(4000), --sql auszuführende Anweisung

@page int=1, --page-Nummer, die angezeigt werden soll

@pageSize int, --Größe jeder Seite
@pageCount int=0 out, --Gesamtzahl der Seiten
@recordCount int =0 out --Gesamtzahl der Datensätze
wie
festgelegt nocount on
declare @p1 int
exec sp_cursoropen @p1 Output,@sql,@scrollopt=1,@ccopt=1,@rowcount= @pagecount Output
set @recordCount = @pageCount
select @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize
exec sp_cursorclose @p1
GO
Inhalt der ASP-Seite
sql = "Wählen Sie id, c_s_name aus tabNews aus, wo gelöscht wurde<>1 Sortieren nach id Desc"
page = cint(page_get)
if page_post<>""then
page = cint(page_post)
end if
if not page > then
page = 1
end if
pagesize=20'Number Anzahl der Elemente pro Seite
set cmd = server.CreateObject("adodb.command")
cmd.ActiveConnection = conn
cmd.CommandType = 4
cmd.CommandText = "p_SplitPage"
cmd .Parameters.Append cmd.CreateParameter("@sql",8,1, 4000, sql)
cmd.Parameters.Append cmd.CreateParameter(" @page",4,1, 4, page)
cmd .Parameters.Append cmd.CreateParameter("@pageSize",4,1, 4, pageSize)
cmd.Parameters.Append cmd.CreateParameter(" @pageCount",4,2, 4, pageCount)
cmd .Parameters.Append cmd.CreateParameter("@recordCount",4,2, 4, recordCount)
set rs = cmd.Execute
set rs = rs.NextRecordSet
pageCount = cmd.Parameters("@ pageCount").value
recordCount = cmd.Parameters("@recordCount").value
if pageCount = 0 then pageCount = 1
if page>pageCount then
response.Redirect("?page ="&pageCount)
end if
set rs = cmd.Execute



Cursor

1. Konzept

Cursor (Cursor) Ermöglicht Benutzern den zeilenweisen Zugriff auf die von SQL Server zurückgegebene Ergebnismenge.

Einer der Hauptgründe für die Verwendung eines Cursors besteht darin, Erfassungsvorgänge in die Verarbeitung einzelner Datensätze umzuwandeln. Nach dem Abrufen von Daten aus der Datenbank mithilfe der SQL-Sprache wird das Ergebnis in einem Speicherbereich abgelegt, und das Ergebnis ist häufig eine Sammlung mit mehreren Datensätzen. Der Cursor-Mechanismus ermöglicht es Benutzern, zeilenweise auf diese Datensätze im SQL-Server zuzugreifen und diese Datensätze nach den eigenen Wünschen anzuzeigen und zu bearbeiten.

2. Vorteile von Cursorn

Die folgenden Vorteile von Cursorn können aus der Cursordefinition erzielt werden, wodurch Cursor in praktischen Anwendungen eine wichtige Rolle spielen:
1) Ermöglichen Sie dem Programm, für jede Zeile im zurückgegebenen Zeilensatz die gleiche oder eine andere Ausführung auszuführen durch die Abfrageanweisung den Vorgang auswählen, anstatt denselben Vorgang für den gesamten Satz von Zeilen auszuführen.
2) Bietet die Möglichkeit, Zeilen in der Tabelle basierend auf der Cursorposition zu löschen und zu aktualisieren.
3) Cursor dienen tatsächlich als Brücke zwischen satzorientierten Datenbankverwaltungssystemen (RDBMS) und zeilenorientierter Programmierung, sodass die beiden Verarbeitungsmethoden über Cursor kommunizieren können.

3. Die Verwendung von Cursorn

hat über die Vorteile mehrerer Cursor gesprochen. Jetzt werden wir persönlich das Geheimnis der Cursor enthüllen.

Die Reihenfolge der Verwendung von Cursorn: Cursor deklarieren, Cursor öffnen, Daten lesen, Cursor schließen, Cursor löschen


VERFAHREN PK_Test ERSTELLEN

AS

--Deklarieren Sie eine Variable

deklarieren Sie @O_ID nvarchar(20)

deklarieren Sie @A_Salary float

--Deklaration Ein Cursor mycursor,

Mycursor-Cursor deklarieren, um O_ID,A_Salary aus AddSalary auszuwählen

--Cursor öffnen

Mycursor öffnen

--Rufen Sie Daten vom Cursor ab (die Anzahl der Parameter in der SELECT-Anweisung muss mit dem aus dem Cursor entnommenen Variablennamen übereinstimmen) und weisen Sie sie der Variablen zu, die wir gerade deklariert haben

nächstes von mycursor in @O_ID,@A_Salary abrufen

/*//Bestimmen Sie den Status des Cursors

//0 Abrufanweisung erfolgreich

//-1 fetch Die Anweisung ist fehlgeschlagen oder die Zeile ist nicht im Ergebnissatz

//-2 Die extrahierte Zeile existiert nicht*/


--loop liest den Cursor immer wieder, ermittelt den Wert von @O_ID, @A_Salary

while (@@fetch_status=0)

--Mit dem Lesen beginnen

beginnen

--Behandeln Sie @O_ID, @A_Salary als bekannte Größe und verwenden Sie sie nach Belieben.

--Zeigt den Wert an, den wir jedes Mal mit dem Cursor abgerufen haben

print „Der Cursor hat erfolgreich ein Datenelement abgerufen“

print @O_ID

@A_Salary drucken

--Verwenden Sie den Cursor, um einen Datensatz abzurufen

Als nächstes von meinem Cursor in @O_ID,@A_Salary abrufen

Ende



--Cursor schließen

meinen Cursor schließen

--Cursor freigeben

Zuweisung aufheben mycursor

GO


Usage of Top

select Top 5 lngWorkID,strWorkName,strExecHumanName,strBeginDate

aus der Arbeitsliste wobei lngExecHumanID= @lngUserID

Die ersten 5 Zeilen des mit der SQL-Anweisung erhaltenen Datensatzes abrufen


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage