一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

使用 SQL Server 時需要經(jīng)常用到的幾個設(shè)置選項!

 duduwolf 2005-10-01

1. SET DEADLOCK_PRIORITY

說明:控制在發(fā)生死鎖情況時會話的反應(yīng)方式。如果兩個進(jìn)程都鎖定數(shù)據(jù),并且直到其它進(jìn)程釋放自己的鎖時,每個進(jìn)程才能釋放自己的鎖,即發(fā)生死鎖情況。

語法:SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }

參數(shù):LOW  指定當(dāng)前會話為首選死鎖犧牲品。Microsoft® SQL Server™ 自動回滾死鎖犧牲品的事務(wù),并給客戶端應(yīng)用程序返回 1205 號死鎖錯誤信息。
   NORMAL  指定會話返回到默認(rèn)的死鎖處理方法。
   @deadlock_var 是指定死鎖處理方法的字符變量。如果指定 LOW,則 @deadlock_var 為 3;如果指定 NORMAL,則 @deadlock_var 為 6。

注釋:SET DEADLOCK_PRIORITY 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

權(quán)限:SET DEADLOCK_PRIORITY 權(quán)限默認(rèn)授予所有用戶。

 

2. SET LOCK_TIMEOUT

說明:指定語句等待鎖釋放的毫秒數(shù)。

語法:SET LOCK_TIMEOUT timeout_period

參數(shù):timeout_period 是在 Microsoft® SQL Server™ 返回鎖定錯誤前經(jīng)過的毫秒數(shù)。值為 -1(默認(rèn)值)時表示沒有超時期限(即無限期等待)。
      當(dāng)鎖等待超過超時值時,將返回錯誤。值為 0 時表示根本不等待,并且一遇到鎖就返回信息。

注釋:在連接開始時,該設(shè)置的值為 -1。設(shè)置更改后,新設(shè)置在其余的連接時間里一直有效。
   SET LOCK_TIMEOUT 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。
   READPAST 鎖定提示為該 SET 選項提供了另一種方式。

權(quán)限:SET LOCK_TIMEOUT 權(quán)限默認(rèn)授予所有用戶。

示例:下例將鎖超時期限設(shè)置為 1,800 毫秒。

   SET LOCK_TIMEOUT 1800
   GO

 

3. @@LOCK_TIMEOUT

說明:返回當(dāng)前會話的當(dāng)前鎖超時設(shè)置,單位為毫秒。

語法:@@LOCK_TIMEOUT

返回類型:integer

注釋:SET LOCK_TIMEOUT 允許應(yīng)用程序設(shè)置語句等待阻塞資源的最長時間。當(dāng)一條語句已等待超過 LOCK_TIMEOUT 所設(shè)置的時間,則被鎖住的語句將自動取消,并給應(yīng)用程序返回一條錯誤信息。
   在一個連接的開始,@@LOCK_TIMEOUT 返回一個 –1值。

示例:下面的示例顯示當(dāng)一個 LOCK_TIMEOUT 值未被設(shè)置時的結(jié)果集。

   SELECT @@LOCK_TIMEOUT
   下面是結(jié)果集:
   ----------------
   -1

   下面的示例設(shè)置 LOCK_TIMEOUT 為 1800 毫秒,然后調(diào)用 @@LOCK_TIMEOUT。

   SET LOCK_TIMEOUT 1800
   SELECT @@LOCK_TIMEOUT

   下面是結(jié)果集:
   ------------------------------
   1800

 

4. SET IDENTITY_INSERT

說明:允許將顯式值插入表的標(biāo)識列中。

語法:SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

參數(shù):database 是指定的表所駐留的數(shù)據(jù)庫名稱。
   owner 是表所有者的名稱。
   table 是含有標(biāo)識列的表名。

注釋:任何時候,會話中只有一個表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個表已將此屬性設(shè)置為 ON,并且為另一個表發(fā)出了 SET IDENTITY_INSERT ON 語句,則 Microsoft® SQL Server™ 返回一個錯誤信息,指出 SET IDENTITY_INSERT 已設(shè)置為 ON 并報告此屬性已設(shè)置為 ON 的表。
   如果插入值大于表的當(dāng)前標(biāo)識值,則 SQL Server 自動將新插入值作為當(dāng)前標(biāo)識值使用。
   SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

權(quán)限:執(zhí)行權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色和 db_owner 及 db_ddladmin 固定數(shù)據(jù)庫角色以及對象所有者。

示例:下例創(chuàng)建一個含有標(biāo)識列的表,并顯示如何使用 SET IDENTITY_INSERT 設(shè)置填充由 DELETE 語句導(dǎo)致的標(biāo)識值中的空隙。

   -- Create products table.
   CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
   GO
   -- Inserting values into products table.
   INSERT INTO products (product) VALUES (‘screwdriver‘)
   INSERT INTO products (product) VALUES (‘hammer‘)
   INSERT INTO products (product) VALUES (‘saw‘)
   INSERT INTO products (product) VALUES (‘shovel‘)
   GO

   -- Create a gap in the identity values.
   DELETE products
   WHERE product = ‘saw‘
   GO

   SELECT *
   FROM products
   GO

   -- Attempt to insert an explicit ID value of 3;
   -- should return a warning.
   INSERT INTO products (id, product) VALUES(3, ‘garden shovel‘)
   GO

   -- SET IDENTITY_INSERT to ON.
   SET IDENTITY_INSERT products ON
   GO

   -- Attempt to insert an explicit ID value of 3
   INSERT INTO products (id, product) VALUES(3, ‘garden shovel‘)
   GO

   SELECT *
   FROM products
   GO

   -- Drop products table.
   DROP TABLE products
   GO

 

5. SET IMPLICIT_TRANSACTIONS

說明:為連接設(shè)置隱性事務(wù)模式。

語法:SET IMPLICIT_TRANSACTIONS { ON | OFF }

注釋:當(dāng)設(shè)置為 ON 時,SET IMPLICIT_TRANSACTIONS 將連接設(shè)置為隱性事務(wù)模式。當(dāng)設(shè)置為 OFF 時,則使連接返回到自動提交事務(wù)模式。
   當(dāng)連接是隱性事務(wù)模式且當(dāng)前不在事務(wù)中時,執(zhí)行下列語句將啟動事務(wù):

   ALTER TABLE FETCH REVOKE
   CREATE  GRANT SELECT
   DELETE INSERT TRUNCATE TABLE
   DROP OPEN UPDATE

   如果連接已經(jīng)在打開的事務(wù)中,則上述語句不啟動新事務(wù)。
   對于因為該設(shè)置為 ON 而自動打開的事務(wù),用戶必須在該事務(wù)結(jié)束時將其顯式提交或回滾。否則當(dāng)用戶斷開連接時,事務(wù)及其所包含的所有數(shù)據(jù)更改將回滾。在事務(wù)提交后,執(zhí)行上述任一語句即可啟動新事務(wù)。
   隱性事務(wù)模式將保持有效,直到連接執(zhí)行 SET IMPLICIT_TRANSACTIONS OFF 語句使連接返回到自動提交模式。在自動提交模式下,如果各個語句成功完成則提交。
   在進(jìn)行連接時,SQL Server ODBC 驅(qū)動程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自動將 IMPLICIT_TRANSACTIONS 設(shè)置為 OFF。對來自 DB-Library 應(yīng)用程序的連接,SET IMPLICIT_TRANSACTIONS 默認(rèn)為 OFF。
   當(dāng) SET ANSI_DEFAULTS 為 ON 時,將啟用 SET IMPLICIT_TRANSACTIONS。
   SET IMPLICIT_TRANSACTIONS 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

示例:下例演示在將 IMPLICIT_TRANSACTIONS 設(shè)置為 ON 時顯式或隱式啟動事務(wù)。它使用 @@TRANCOUNT 函數(shù)演示打開的事務(wù)和關(guān)閉的事務(wù)。

   USE pubs
   GO

   CREATE table t1 (a int)
   GO
   INSERT INTO t1 VALUES (1)
   GO

   PRINT ‘Use explicit transaction‘
   BEGIN TRAN
   INSERT INTO t1 VALUES (2)
   SELECT ‘Tran count in transaction‘= @@TRANCOUNT
   COMMIT TRAN
   SELECT ‘Tran count outside transaction‘= @@TRANCOUNT
   GO

   PRINT ‘Setting IMPLICIT_TRANSACTIONS ON‘
   GO
   SET IMPLICIT_TRANSACTIONS ON
   GO

   PRINT ‘Use implicit transactions‘
   GO
   -- No BEGIN TRAN needed here.
   INSERT INTO t1 VALUES (4)
   SELECT ‘Tran count in transaction‘= @@TRANCOUNT
   COMMIT TRAN
   SELECT ‘Tran count outside transaction‘= @@TRANCOUNT
   GO

   PRINT ‘Use explicit transactions with IMPLICIT_TRANSACTIONS ON‘
   GO
   BEGIN TRAN
   INSERT INTO t1 VALUES (5)
   SELECT ‘Tran count in transaction‘= @@TRANCOUNT
   COMMIT TRAN
   SELECT ‘Tran count outside transaction‘= @@TRANCOUNT
   GO

   SELECT * FROM t1
   GO

   -- Need to commit this tran too!
   DROP TABLE t1
   COMMIT TRAN
   GO

 

6. SET NOCOUNT
說明:使返回的結(jié)果中不包含有關(guān)受 Transact-SQL 語句影響的行數(shù)的信息。

語法:SET NOCOUNT { ON | OFF }

注釋:當(dāng) SET NOCOUNT 為 ON 時,不返回計數(shù)(表示受 Transact-SQL 語句影響的行數(shù))。當(dāng) SET NOCOUNT 為 OFF 時,返回計數(shù)。
   即使當(dāng) SET NOCOUNT 為 ON 時,也更新 @@ROWCOUNT 函數(shù)。
   當(dāng) SET NOCOUNT 為 ON 時,將不給客戶端發(fā)送存儲過程中的每個語句的 DONE_IN_PROC 信息。當(dāng)使用 Microsoft® SQL Server™ 提供的實用工具執(zhí)行查詢時,在 Transact-SQL 語句(如 SELECT、INSERT、UPDATE 和 DELETE)結(jié)束時將不會在查詢結(jié)果中顯示"nn rows affected"。
   如果存儲過程中包含的一些語句并不返回許多實際的數(shù)據(jù),則該設(shè)置由于大量減少了網(wǎng)絡(luò)流量,因此可顯著提高性能。
   SET NOCOUNT 設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

權(quán)限:SET NOCOUNT 權(quán)限默認(rèn)授予所有用戶。

示例:下例在 osql 實用工具或 SQL Server 查詢分析器中執(zhí)行時,可防止顯示有關(guān)受影響的行數(shù)的信息。

   USE pubs
   GO
   -- Display the count message.
   SELECT au_lname
   FROM authors
   GO
   USE pubs
   GO
   -- SET NOCOUNT to ON and no longer display the count message.
   SET NOCOUNT ON
   GO
   SELECT au_lname
   FROM authors
   GO
   -- Reset SET NOCOUNT to OFF.
   SET NOCOUNT OFF
   GO

 

7. @@ROWCOUNT
說明:返回受上一語句影響的行數(shù)。

語法:@@ROWCOUNT

返回類型:integer

注釋:任何不返回行的語句將這一變量設(shè)置為 0 ,如 IF 語句。

示例:下面的示例執(zhí)行 UPDATE 語句并用 @@ROWCOUNT 來檢測是否有發(fā)生更改的行。

   UPDATE authors SET au_lname = ‘Jones‘
   WHERE au_id = ‘999-888-7777‘
   IF @@ROWCOUNT = 0
      print ‘Warning: No rows were updated‘

 

8. SET ROWCOUNT

說明:使 Microsoft® SQL Server™ 在返回指定的行數(shù)之后停止處理查詢。

語法:SET ROWCOUNT { number | @number_var }

參數(shù):number | @number_var 是在停止給定查詢之前要處理的行數(shù)(整數(shù))。

注釋:建議將當(dāng)前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 語句重新編寫為使用 TOP 語法。有關(guān)更多信息,請參見 DELETE、INSERT 或 UPDATE。
   對于在遠(yuǎn)程表和本地及遠(yuǎn)程分區(qū)視圖上執(zhí)行的 INSERT、UPDATE 和 DELETE 語句,忽略 SET ROWCOUNT 選項設(shè)置。
   若要關(guān)閉該選項(以便返回所有的行),請將 SET ROWCOUNT 指定為 0。
   說明  設(shè)置 SET ROWCOUNT 選項將使大多數(shù) Transact-SQL 語句在已受指定數(shù)目的行影響后停止處理。這包括觸發(fā)器和 INSERT、UPDATE 及 DELETE 等數(shù)據(jù)修改語句。ROWCOUNT 選項對動態(tài)游標(biāo)無效,但限制鍵集的行集和不感知游標(biāo)。使用該選項時應(yīng)謹(jǐn)慎,它主要與 SELECT 語句一起使用。
   如果行數(shù)的值較小,則 SET ROWCOUNT 替代 SELECT 語句 TOP 關(guān)鍵字。
   SET ROWCOUNT 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

權(quán)限:SET ROWCOUNT 權(quán)限默認(rèn)授予所有用戶。

示例:SET ROWCOUNT 在指定的行數(shù)后停止處理。在下例中,注意有 x 行滿足預(yù)付款少于或等于 $5,000 的條件;但是,從更新所返回的行數(shù)中可以看出并非所有的行都得到處理。ROWCOUNT 影響所有的 Transact-SQL 語句。

   USE pubs
   GO
   SELECT count(*) AS Cnt
   FROM titles
   WHERE advance >= 5000
   GO

   下面是結(jié)果集:

   Cnt      
   -----------
   11         

   (1 row(s) affected)

   現(xiàn)在,將 ROWCOUNT 設(shè)置為 4,并更新預(yù)付款等于或大于 $5,000 的所有行。

   -- SET ROWCOUNT to 4.
   SET ROWCOUNT 4
   GO
   UPDATE titles
   SET advance = 5000
   WHERE advance >= 5000
   GO

 

9. SET TRANSACTION ISOLATION LEVEL
說明:控制由連接發(fā)出的所有 Microsoft® SQL Server™ SELECT 語句的默認(rèn)事務(wù)鎖定行為。

語法:SET TRANSACTION ISOLATION LEVEL
   { READ COMMITTED
       | READ UNCOMMITTED
       | REPEATABLE READ
       | SERIALIZABLE
   }

參數(shù):READ COMMITTED 指定在讀取數(shù)據(jù)時控制共享鎖以避免臟讀,但數(shù)據(jù)可在事務(wù)結(jié)束前更改,從而產(chǎn)生不可重復(fù)讀取或幻像數(shù)據(jù)。該選項是 SQL Server 的默認(rèn)值。
   READ UNCOMMITTED 執(zhí)行臟讀或 0 級隔離鎖定,這表示不發(fā)出共享鎖,也不接受排它鎖。當(dāng)設(shè)置該選項時,可以對數(shù)據(jù)執(zhí)行未提交讀或臟讀;在事務(wù)結(jié)束前可以更改數(shù)據(jù)內(nèi)的數(shù)值,行也可以出現(xiàn)在數(shù)據(jù)集中或從數(shù)據(jù)集消失。該選項的作用與在事務(wù)內(nèi)所有語句中的所有表上設(shè)置 NOLOCK 相同。這是四個隔離級別中限制最小的級別。
   REPEATABLE READ 鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是其他用戶可以將新的幻像行插入數(shù)據(jù)集,且幻像行包括在當(dāng)前事務(wù)的后續(xù)讀取中。因為并發(fā)低于默認(rèn)隔離級別,所以應(yīng)只在必要時才使用該選項。
   SERIALIZABLE 在數(shù)據(jù)集上放置一個范圍鎖,以防止其他用戶在事務(wù)完成之前更新數(shù)據(jù)集或?qū)⑿胁迦霐?shù)據(jù)集內(nèi)。這是四個隔離級別中限制最大的級別。因為并發(fā)級別較低,所以應(yīng)只在必要時才使用該選項。該選項的作用與在事務(wù)內(nèi)所有 SELECT 語句中的所有表上設(shè)置 HOLDLOCK 相同。

注釋:一次只能設(shè)置這些選項中的一個,而且設(shè)置的選項將一直對那個連接保持有效,直到顯式更改該選項為止。這是默認(rèn)行為,除非在語句的 FROM 子句中在表級上指定優(yōu)化選項。
   SET TRANSACTION ISOLATION LEVEL 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

示例:下例為會話設(shè)置 TRANSACTION ISOLATION LEVEL。對于每個后續(xù) Transact-SQL 語句,SQL Server 將所有共享鎖一直控制到事務(wù)結(jié)束為止。

   SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
   GO
   BEGIN TRANSACTION
   SELECT * FROM publishers
   SELECT * FROM authors
   ...
   COMMIT TRANSACTION

 

10. SET XACT_ABORT

說明:指定當(dāng) Transact-SQL 語句產(chǎn)生運(yùn)行時錯誤時,Microsoft® SQL Server™ 是否自動回滾當(dāng)前事務(wù)。

語法:SET XACT_ABORT { ON | OFF }

注釋:當(dāng) SET XACT_ABORT 為 ON 時,如果 Transact-SQL 語句產(chǎn)生運(yùn)行時錯誤,整個事務(wù)將終止并回滾。為 OFF 時,只回滾產(chǎn)生錯誤的 Transact-SQL 語句,而事務(wù)將繼續(xù)進(jìn)行處理。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。
   對于大多數(shù) OLE DB 提供程序(包括 SQL Server),隱性或顯式事務(wù)中的數(shù)據(jù)修改語句必須將 XACT_ABORT 設(shè)置為 ON。唯一不需要該選項的情況是提供程序支持嵌套事務(wù)時。有關(guān)更多信息,請參見分布式查詢和分布式事務(wù)。
   SET XACT_ABORT 的設(shè)置是在執(zhí)行或運(yùn)行時設(shè)置,而不是在分析時設(shè)置。

示例:下例導(dǎo)致在含有其它 Transact-SQL 語句的事務(wù)中發(fā)生違反外鍵錯誤。在第一個語句集中產(chǎn)生錯誤,但其它語句均成功執(zhí)行且事務(wù)成功提交。在第二個語句集中,SET XACT_ABORT 設(shè)置為 ON。這導(dǎo)致語句錯誤使批處理終止,并使事務(wù)回滾。

   CREATE TABLE t1 (a int PRIMARY KEY)
   CREATE TABLE t2 (a int REFERENCES t1(a))
   GO
   INSERT INTO t1 VALUES (1)
   INSERT INTO t1 VALUES (3)
   INSERT INTO t1 VALUES (4)
   INSERT INTO t1 VALUES (6)
   GO
   SET XACT_ABORT OFF
   GO
   BEGIN TRAN
   INSERT INTO t2 VALUES (1)
   INSERT INTO t2 VALUES (2) /* Foreign key error */
   INSERT INTO t2 VALUES (3)
   COMMIT TRAN
   GO

   SET XACT_ABORT ON
   GO

   BEGIN TRAN
   INSERT INTO t2 VALUES (4)
   INSERT INTO t2 VALUES (5) /* Foreign key error */
   INSERT INTO t2 VALUES (6)
   COMMIT TRAN
   GO

   /* Select shows only keys 1 and 3 added.
      Key 2 insert failed and was rolled back, but
      XACT_ABORT was OFF and rest of transaction
      succeeded.
      Key 5 insert error with XACT_ABORT ON caused
      all of the second transaction to roll back. */

   SELECT *
   FROM t2
   GO

   DROP TABLE t2
   DROP TABLE t1
   GO

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲中文字幕高清乱码毛片| 欧美夫妻性生活一区二区| 后入美臀少妇一区二区| 欧美黑人在线精品极品| 日韩欧美国产精品中文字幕| 99精品国产一区二区青青| 国产精品欧美日韩中文字幕| 午夜精品在线视频一区| 老熟女露脸一二三四区| 国产一二三区不卡视频| 一区二区日韩欧美精品| 日韩欧美三级视频在线| 日韩欧美三级视频在线| 91日韩在线视频观看| 免费观看成人免费视频| 成人你懂的在线免费视频| 麻豆蜜桃星空传媒在线观看| 特黄大片性高水多欧美一级 | 大香蕉久久精品一区二区字幕| 熟女白浆精品一区二区| 日本高清中文精品在线不卡| 日本欧美一区二区三区就 | 国产在线一区二区三区不卡| 伊人色综合久久伊人婷婷| 一区二区三区日韩中文| 亚洲中文字幕人妻系列| 四季精品人妻av一区二区三区| 亚洲妇女作爱一区二区三区| 麻豆剧果冻传媒一二三区| 国产在线成人免费高清观看av| 午夜视频在线观看日韩| 成人你懂的在线免费视频| 91精品国产综合久久精品| 男女一进一出午夜视频| 邻居人妻人公侵犯人妻视频| 好东西一起分享老鸭窝| 人妻熟女中文字幕在线| 国产欧美日韩一级小黄片| 我要看日本黄色小视频| 青青操在线视频精品视频| 欧美黑人巨大一区二区三区|