Home Database Mysql Tutorial Getting Started with SQL Server 7.0 (7)

Getting Started with SQL Server 7.0 (7)

Dec 24, 2016 pm 05:40 PM
sql

i. Declaring the cursor
In this step, you need to specify the properties of the cursor and the result set generated according to the requirements. There are two ways to specify a cursor.
Form 1 (ANSI 92)
DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE][OF column_list]}]
Form 2
DECLARE cursor_name CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
FOR select_statement
[FOR {READ ONLY | UPDATE ][OF column_list]}]
INSENSITIVE keyword indicates that a temporary copy is to be created for the retrieved result set, and future data will be obtained from this temporary copy. If the data in the original base table changes during subsequent cursor processing, they will not be visible to the cursor. This insensitive cursor does not allow data changes. The
SCROLL keyword indicates that the cursor can scroll in any direction. All fetch options (first, last, next, relative, absolute) can be used in cursors. If this option is omitted, the cursor can only scroll forward (next).
Select_statement specifies the result set created by the SQL statement. The Transact SQL statements COMPUTE, COMPUTE BY, FOR BROWSE, and INTO are not allowed in the select statement of a cursor declaration.
READ ONLY indicates that data modification is not allowed in the cursor result set. The
UPDATE keyword indicates that the cursor's result set can be modified.
OF column_list specifies the columns in the result set that can be modified. By default (using the UPDATE keyword), all columns can be modified. The
LOCAL keyword indicates that the cursor is local and can only be used within the process in which it is declared. The
GLOBAL keyword makes the cursor globally visible to the entire connection. Global cursors are available anytime the connection is active. Only when the connection ends is the cursor no longer available.
FORWARD_ONLY specifies that the cursor can only scroll forward.
STATIC cursors are the same as INSENSITIVE cursors.
KEYSET specifies the order of selected rows. SQL Server will create a temporary keyword set from the result set. If modifications are made to non-keyword columns of the database, they are visible to the cursor. Because it is a fixed set of keywords, modifications to the keyword column or newly inserted columns are not visible.
DYNAMIC indicates that the cursor will reflect all modifications to the result set.
SCROLL_LOCK is to lock modification or deletion in order to ensure the success of cursor operations.
OPTIMISTIC indicates which modifications or deletions through the cursor will not succeed.
Note:
· If DISTINCT, UNION, and GROUP BY statements are used in the SELECT statement, and the selection contains an aggregate expression, the cursor will automatically be an INSENSITIVE cursor.
· If the base table does not have a unique index, the cursor is created as an INSENSITIVE cursor.
· If the SELECT statement contains ORDER BY, and the column being ORDER BY is not a unique row identifier, the DYNAMIC cursor will be converted into a KEYSET cursor. If the KEYSET cursor cannot be opened, it will be converted to an INSENSITIVE cursor. The same is true for cursors defined using SQL ANSI-92 syntax, but without the INSENSITIVE keyword.
II. Open the cursor
open the cursor is to create a result set. The cursor is defined through the DECLARE statement, but its actual execution is through the OPEN statement. The syntax is as follows:
OPEN { { [GLOBAL] cursor_name } | cursor_variable_name}
GLOBAL specifies a global cursor.
Cursor_name is the name of the open cursor.
Cursor_variable_name is the variable name of the referenced cursor. The variable should be of cursor type.
After the cursor is opened, the system variable @@cursor_rows can be used to detect the number of rows in the result set. When @@cursor_rows is a negative number, it means that the cursor is being migrated asynchronously, and its absolute value (if @@cursor_rows is -5, the absolute value is 5) is the number of rows in the current result set. Asynchronous cursors enable users to still access the results of a cursor while the cursor is completely migrated.
          iii.                                                                                                                                                                                                                                                                                   but ii. If the cursor is defined as scrollable (using the SCROLL keyword when declaring it), any row in the result set can be retrieved at any time. For non-scrolling cursors, fetch operations can only be performed on the row next to the current row. The result set can be retrieved from local variables. The syntax of the Fetch command is as follows:
FETCH [NEXT | PRIOR| FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar}]
FROM [GLOBAL] cursor_name} | cursor_variable_name}
[INTO @variable_name ][,...n]]
NEXT specifies to get the value from the next row of the current row.
PRIOR specifies taking the value from the previous row of the current row.
FIRST is the first row of the result set.
LAST is the last row of the result set.
ABSOLUTE n represents the nth row in the result set. The row number can also be propagated through a local variable. Line numbers start from 0, so you can't get any lines when n is 0.
RELATIVE n means that the row to be fetched is n rows before or n rows after the current row. If the value is a positive number, the row to be fetched is located n rows before the current row. If the value is negative, the row after the current row is returned.
INTO @cursor_variable_name represents the variable list where the cursor column value is stored. The number of variables in this list should be the same as the number of variables used by the select statement in the DECLARE statement. The data type of the variable should also be the same as the data type of the selected column. The value in the variable will be retained until the next time the FETCH statement is used.
Each FETCH execution is stored in the system variable @@fetch_status. If the FETCH is successful, @@fetch_status is set to 0. @@fetch_status of -1 indicates that part of the result set has been reached (for example, a row in the base table was deleted after the cursor was opened). @@fetch_status can be used to construct a cursor processing loop.
For example:
DECLARE @iname char(20), @fname char(20)
OPEN author_cur
FETCH FIRST FROM author_cur INTO @iname, @fname
WHILE @@fetch_status = 0
BEGIN
IF @fname = 'Albert'
PRINT “Found Albert Ringer”
ELSE
Print “Other Ringer”
FETCH NEXT FROM author_cur INTO @iname, @fname
END
                     iv. Close the cursor
CLOSE statement is used to close the cursor and release the result set. After the cursor is closed, no FETCH operation can be performed. If you still need to use the FETCH statement, you need to reopen the cursor. The grammar is as follows:
Close [Global] Cursor_name | Cursor_variable_name
V. Release the cursor
the cursor is no longer needed, to release the cursor. The DEALLOCATE statement releases locks on data structures and cursors. The syntax is as follows:
DEALLOCATE [GLOBAL] cursor_name | cursor_variable_name

A complete example of a cursor is given below:
USE master
GO
CREATE PROCEDURE sp_BuildIndexes
AS
DEC LARE @TableName sysname, @msg varchar(100), @cmd varchar(100)

DECLARE table_cur CURSOR FOR
SELECT name FROM sysobjects WHERE type='u'

OPEN table_cur
FETCH NEXT FROM table_cur INTO @TableName

WHILE @@fetch_status = 0
BEGIN
IF @@fetch_status = -2
CONTINUE
S ELECT @msg = “Building indexes for table”+@TableName+”…”
PRINT @msg
SELECT @cmd = "DBCC DBREINDEX ('"+@TableName+"')"
EXEC (@cmd)
PRINT " "
FETCH NEXT FROM table_cur INTO @TableName
END
DEALLOCATE table_cur
GO
The following script will execute sp_BuildIndexes
USE pubs
GO
EXEC ap_BuildIndexes
for the PUBS database. NOTE: The above is also an example of creating a user-defined system stored procedure.

Use temporary table
Temporary tables are tables created in TempDB. The names of temporary tables all start with "#". The scope of a temporary table is the connection that created the temporary table. Because temporary tables cannot be shared between two connections, the temporary table will be discarded once the connection is closed. If the temporary table is created within a stored procedure, the scope of the temporary table is within the stored procedure, or any stored procedure called by the stored procedure. If you need to share temporary tables between connections, you need to use global temporary tables. The global temporary table starts with the "##" symbol and will exist in the database until SQL Server is restarted. Once such a temporary table is created, all users can access it. Permissions cannot be specified explicitly on temporary tables. Temporary tables provide the ability to store intermediate results. Sometimes, temporary tables can also improve performance by breaking a complex query into two queries. This can be achieved by first storing the results of the first query in a temporary table and then using the temporary table in the second query. Temporary tables are recommended when a subset of a large table is used multiple times during an existing procedure. In this case, keeping a subset of the data in a temporary table for use in subsequent joins can greatly improve performance. Indexes can also be created on temporary tables.

The above is the content of Getting Started with SQL Server 7.0 (7). For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What is the difference between HQL and SQL in Hibernate framework? What is the difference between HQL and SQL in Hibernate framework? Apr 17, 2024 pm 02:57 PM

HQL and SQL are compared in the Hibernate framework: HQL (1. Object-oriented syntax, 2. Database-independent queries, 3. Type safety), while SQL directly operates the database (1. Database-independent standards, 2. Complex executable queries and data manipulation).

Usage of division operation in Oracle SQL Usage of division operation in Oracle SQL Mar 10, 2024 pm 03:06 PM

"Usage of Division Operation in OracleSQL" In OracleSQL, division operation is one of the common mathematical operations. During data query and processing, division operations can help us calculate the ratio between fields or derive the logical relationship between specific values. This article will introduce the usage of division operation in OracleSQL and provide specific code examples. 1. Two ways of division operations in OracleSQL In OracleSQL, division operations can be performed in two different ways.

What does the identity attribute in SQL mean? What does the identity attribute in SQL mean? Feb 19, 2024 am 11:24 AM

What is Identity in SQL? Specific code examples are needed. In SQL, Identity is a special data type used to generate auto-incrementing numbers. It is often used to uniquely identify each row of data in a table. The Identity column is often used in conjunction with the primary key column to ensure that each record has a unique identifier. This article will detail how to use Identity and some practical code examples. The basic way to use Identity is to use Identit when creating a table.

Comparison and differences of SQL syntax between Oracle and DB2 Comparison and differences of SQL syntax between Oracle and DB2 Mar 11, 2024 pm 12:09 PM

Oracle and DB2 are two commonly used relational database management systems, each of which has its own unique SQL syntax and characteristics. This article will compare and differ between the SQL syntax of Oracle and DB2, and provide specific code examples. Database connection In Oracle, use the following statement to connect to the database: CONNECTusername/password@database. In DB2, the statement to connect to the database is as follows: CONNECTTOdataba

Detailed explanation of the Set tag function in MyBatis dynamic SQL tags Detailed explanation of the Set tag function in MyBatis dynamic SQL tags Feb 26, 2024 pm 07:48 PM

Interpretation of MyBatis dynamic SQL tags: Detailed explanation of Set tag usage MyBatis is an excellent persistence layer framework. It provides a wealth of dynamic SQL tags and can flexibly construct database operation statements. Among them, the Set tag is used to generate the SET clause in the UPDATE statement, which is very commonly used in update operations. This article will explain in detail the usage of the Set tag in MyBatis and demonstrate its functionality through specific code examples. What is Set tag Set tag is used in MyBati

How does Java use the MySQL driver interceptor to implement SQL time-consuming calculations? How does Java use the MySQL driver interceptor to implement SQL time-consuming calculations? May 27, 2023 pm 01:10 PM

Background: One of the company's needs is that the company's existing link tracking log component must support MySQL's SQL execution time printing. The common method to implement link tracking is to implement the interceptor interface or filter interface provided by a third-party framework or tool. MySQL is no exception. In fact, it just implements the interceptor interface driven by MySQL. There are different versions of MySQL channels, and the interceptor interfaces of different versions are different, so you need to implement the response interceptor according to the different versions of MySQL drivers you use. Next, we will introduce MySQL channels 5 and 6 respectively. 8 version implementation. MySQL5 is implemented here using MySQL channel 5.1.18 version as an example to implement Statem

How SpringBoot encrypts the SQL account password of the configuration file How SpringBoot encrypts the SQL account password of the configuration file May 22, 2023 pm 08:50 PM

1. Introduce the dependency com.github.ulisesbocchiojasypt-spring-boot-starter2.1.02 into the Maven project. At the same time, you need to configure the password in the application.yml configuration file because the tool uses this password for encryption or decryption, so the configuration must be ensured. The encrypted string is encrypted using the same password, otherwise it cannot be decrypted when the project is started. jasypt:encryptor:password:1234563. You can encrypt the original information in the test case. The method of use is very simple. The simple Demo is as follows: @RunWith(SpringRunner

How to solve the 5120 error in SQL How to solve the 5120 error in SQL Mar 06, 2024 pm 04:33 PM

Solution: 1. Check whether the logged-in user has sufficient permissions to access or operate the database, and ensure that the user has the correct permissions; 2. Check whether the account of the SQL Server service has permission to access the specified file or folder, and ensure that the account Have sufficient permissions to read and write the file or folder; 3. Check whether the specified database file has been opened or locked by other processes, try to close or release the file, and rerun the query; 4. Try as administrator Run Management Studio as etc.

See all articles