1. 程式人生 > >解決SQL Server觸發器濫用問題

解決SQL Server觸發器濫用問題

 觸發器是在新增、修改資料或者將資料遷移到一個指定表時執行某些動作的方法。SQL Server 2005也同樣提供資料庫級的觸發器,但是我在此只說明表級觸發器。由於觸發器會啟動一個隱藏事務,因此觸發器會在伺服器上強加額外的開支。一旦執行觸發器,一個新的隱藏事務就會開始,同時在事務中的任意資料檢索將鎖定受影響表。

  你應該怎麼處理呢?要儘量少用觸發器並且儘可能使觸發器邏輯簡單。你可以簡單地以完整性引用約束來替代某些觸發器;其它觸發器功能可以在儲存過程中實現。

  返回受影響行數

  預設情況下,SQL Server返回一個友好的訊息來報告每個查詢所影響的行總數。這對於除錯應用或者直接在Query Analyzer中修改資料是一個非常好的設定。然而,你的前端應用並不需要知道受影響的行數目——它只需要資料。傳送這個訊息可能會引入不必要的網路負荷。

  你應該如何處理呢?在你的所有儲存過程中使用“SET NOCOUNT ON”來減少網路傳輸。

  條件語句執行

  往往,你需要根據傳遞到儲存過程的引數的不同值應用不同的程式碼邏輯。比如,如果我的引數值是0,那麼我可以從一組表中檢索值,如果引數值為1,則可以從另一組表中檢索。

  IF @parameter = 0
  BEGIN
  SELECT column1, column2
  FROM some_tables…
  END
  ELSE
  BEGIN
  SELECT column1, column2
  FROM other_tables…
  END

  這個程式碼迫使我的過程在每次執行時都必須重新編譯,因為SQL Server只有在執行時才能識別兩個規劃中的哪一個是有用的。

  你應該如何處理呢?將上面的過程分成兩個獨立的過程,每個對應查詢不同的表集。在你的中間層程式碼中確定引數值,然後再呼叫恰當的儲存過程。

相關推薦

解決SQL Server觸發器濫用問題

 觸發器是在新增、修改資料或者將資料遷移到一個指定表時執行某些動作的方法。SQL Server 2005也同樣提供資料庫級的觸發器,但是我在此只說明表級觸發器。由於觸發器會啟動一個隱藏事務,因此觸發器會在伺服器上強加額外的開支。一旦執行觸發器,一個新的隱藏事務就會開始,同時在

SQL server觸發器、存儲過程操作遠程數據庫插入數據,解決服務器已存在的問題

定義 ims val rom 記錄 插入記錄 其它 pre 項目 近期弄了一個小項目,也不是非常復雜,須要將一個數據庫的一些數據備份到另外一個庫。不是本地,可能是網絡上其它的數據庫。想了一下,用了存儲過程和觸發器。也不是非常復雜,首先我須要操作遠程數據庫,於是寫了一個存

SQL server觸發器、儲存過程操作遠端資料庫插入資料,解決伺服器已存在的問題

最近弄了一個小專案,也不是很複雜,需要將一個數據庫的一些資料備份到另外一個庫,不是本地,可能是網路上其他的資料庫,想了一下,用了儲存過程和觸發器。也不是很複雜,首先我需要操作遠端資料庫,於是寫了一個儲存過程: CREATE PROCEDURE sendInfoToRemo

解決SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的訪問

option eight img 導入 col cnblogs 數據 編輯器 code 根據需要進行asp.net的數據導入導出,結果報以下錯: SQL Server 阻止了對組件 ‘Ad Hoc Distributed Queries‘ 的 STATEMENT ‘Open

解決 SQL Server 所有帳號無 sysadmin 權限,且未啟用 SQL Server 身份驗證,sa 帳號也未啟用的問題

服務 sta gem 編輯 ble word mode 編輯器 with 解決 未啟用 SQL Server 身份驗證 的問題: 1. 運行 regedit,進入註冊表編輯器 2. 打開:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Micro

【轉載】解決SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的訪問的方法

com .html style color statement 轉載 ons server http 1、開啟Ad Hoc Distributed Queries組件,在sql查詢編輯器中執行如下語句: exec sp_configure ‘show advanced

如何解決SQL Server 2008 無法連接到(local)

選擇 ima self 服務器類型 clear erl 引擎 gem sign 打開SQL SERVER配置管理--》SQL SERVER 網絡配置--》實例名的協議 將SQLEXPRESS協議中的Named Pipes和 TCP/IP啟用。

如何監控和解決SQL Server的阻塞(1) (當前阻塞)

host tab tool alt 現象 dmv fonts 毫秒 .text 1. 什麽是"阻塞"? 阻塞是SQL數據庫應用"鎖"機制的一個副作用。當一個應用請求針對某個數據庫對象(例如全表,某行數據, 或者是某個數據頁)加鎖後,那麽這個鎖會阻塞其它的應用請求。這就好像你

【2018-01-19】Sql Server-觸發器

1-1 觸發器 eight sco 不能 val ted 直接 ins 1 --create table users--創建用戶表 2 --( 3 -- ids int primary key identity(1,1), 4 -- name nvar

淺入淺出SQL Server 觸發器

什麼是觸發器 簡單的來說,在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是一個特殊的儲存過程。 觸發器的建立 常見的觸發器有三種,分別對應於Insert 、Update、Delete事件。 怎麼建立觸發器呢?在牛腩新聞釋出系統

解決SQL Server本地Windows身份無法登入,錯誤程式碼18456問題

今天突然發現本地SQL Server,用Windows身份無法登入,錯誤程式碼18456。最終找到了解決辦法,一句SQL搞定:   CREATE LOGIN [計算機名\Windows帳戶名] FROM WINDOWS   不過要執行這句SQL語句,必須通過SQL Serv

SQL Server觸發器建立、刪除、修改、檢視

教程貼士:本教程為大家介紹SQL Server觸發器建立、刪除、修改、檢視方法。     一:觸發器是一種特殊的儲存過程,它不能被顯式地呼叫,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約束。   二:SQL Server

Sql Server 觸發器Update、Insert、Delete

什麼是觸發器 在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是一個特殊的儲存過程。 常見的觸發器一共有三種 Insert, Update,Delete

SQL server觸發器觸發器基礎知識

前言: 觸發器與儲存過程有一點點差別的,那麼我們什麼時候要用觸發器,接下來將給大家揭曉! 1、什麼是觸發器 觸發器是一個在修改指定表中的資料執行的儲存過程。通常通過建立觸發器來強制實現 不同表 中的邏輯相關資料的引用完整性或一致性。由於使用者不能繞過

解決 SQL Server 2008 不能儲存密碼

解決 SQL Server 2008 不能儲存密碼 原因在於使用的預設使用者名稱 'sa' 而沒有密碼,解決的辦法就是新建立一個帶密碼的使用者: 左邊列表選擇 安全性 - 登入名 - 右鍵選擇 新建登入名,在彈出的對話方塊建立使用者名稱密碼 在左邊選擇 伺服器角色 頁,設定伺服器角色,這應該是設

解決SQL Server裡sp_helptext輸出格式錯行問題

use Master go if object_id('SP_SQL') is not null drop proc SP_SQL go /*******************************************************************

解決SQL Server 2008提示評估期已過

解決SQL Server 2008提示評估期已過 第一步:進入SQL2008配置工具中的安裝中心 第二步:再進入維護介面,選擇版本升級 第三步:進入產品金鑰,輸入金鑰 第四步:一直點下一步,直到升級完畢。 SQL Server 2008 Developer:PTTFM-X467

解決SQL Server查詢中使用Union或Union All後Order by排序無效的bug(好神奇啊!!)

http://www.ourcodelife.com/article-415-1.html 首先,在程式人生網站上,需要負責任的指出的是在SQL Server查詢中使用Union或Union All後Order by排序無效,我不確認是不是微軟的bug,不過這裡卻是我實際程式設計工作的經驗,但願大家看到

SQL Server 觸發器(內容非常不錯,轉載記錄)

觸發器是一種特殊型別的儲存過程,它不同於之前的我們介紹的儲存過程。觸發器主要是通過事件進行觸發被自動呼叫執行的。而儲存過程可以通過儲存過程的名稱被呼叫。 Ø 什麼是觸發器     觸發器對錶進行插入、更新、刪除的時候會自動執行的特殊儲存過程。觸發器一般用在

SQL Server 觸發器

概述 觸發器為特殊型別的儲存過程,可在執行語言事件時自動生效。SQL Server 包括三種常規型別的觸發器:DML 觸發器、DDL 觸發器和登入觸發器。 當伺服器或資料庫中發生資料定義語言 (DDL) 事件時將呼叫 DDL 觸發器。登入觸發器將為響應 LOGON 事件而激發儲存過程。與 SQL Serv