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)))+'.'
as
begin
select 'UserName'
end
in #tempTable(Benutzername) einfügen
exec GetUserName
Tabelle löschen #tempTable – Es ist zu beachten, dass diese Methode nicht verschachtelt werden kann. Zum Beispiel:
begin
...
insert #table exec b
end
prozedur b
begin
.. .
insert #table exec c
select * from #table
end
procedure c
begin
...
select * from sometable
end
--„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 @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
<< 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 StandardwertOUT-AusgabeparameterDer Wert kann innerhalb der gespeicherten Prozedur geändert und zurückgegeben werden
Wird angegeben, wenn aufgerufen und kann geändert und zurückgegeben werden
AS
if (@a>@b)
set @Returnc =@a
else
-- 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> –+
+———————–+
+ 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
SPACE(count) //Anzahl-Leerzeichen generieren
5.2 Numerischer Typ
BIN (Dezimalzahl) //Dezimal zu Binärzahl
CEILING (Zahl2) //AufrundenCONV(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
+————-+
| ————-+|. 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
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
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