Time of Update: 2018-12-07
昨天在測試一段批量插入記錄的資料庫操作時,發現開啟事務與否對效能影響很大,根據當時的環境,測試有6倍差距.分別測試插入500條/5000條/50000條,開啟事務時分別為480毫秒/4546毫秒/47407毫秒不開事務時分別為3100毫秒/30859毫秒/308802毫秒這是什麼原因呢?仔細分析一下,這個應該跟SqlServer的後台記憶體管理和資料存取機制相關。 當我們提交資料到伺服器時,SqlServer會按如下順序進行操作: 1)複製資料到記憶體;2)書寫動作記錄;3)
Time of Update: 2018-12-07
通過sql query建立的表,所有者就是運行sql query使用者本身。有時候遷移資料庫之後,使用者更改了,標的所有者也需要更改,不然就會出現讀不到資料的情形。如:“mytable對象不存在”之類的。下面是修改表所有者的方式:批量修改:EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '單個修改:exec sp_changeobjectowner '要改的表名','dbo'只有所有者才能更改表的所有者exec
Time of Update: 2018-12-07
SQL隨機查詢SQL Server: Select TOP N * From TABLE Order By NewID()NewID()函數將建立一個 uniqueidentifier 類型的唯一值。上面的語句實現效果是從Table中隨機讀取N條記錄。 MySql: Select * From TABLE Order By Rand() Limit 10 STR轉換數字為字串用於比較SELECT (CASE STR(100 ,4,2) WHEN '100' THEN '相等' ELSE
Time of Update: 2018-12-07
源於博問中的一個提問:我的資料庫A,想返回兩個時間的時間差,兩個時間的格式如下:a b11:00:00 12:20:11然後我想返回的格式是c1:20:11我用datediff,但出不了我的結果,格式都不是那樣的,請問該怎麼寫?我的回答:SELECT CAST(DATEDIFF(HH,'11:00:00','12:20:11') AS VARCHAR)+ ':' +CAST((DATEDIFF(MI,'11:00:00','12:20:11')%60) AS VARCHAR)+ ':'
Time of Update: 2018-12-07
一般來說,使用sql server 作為後台資料庫,最簡單容易的使用者密碼加密和密碼校正就是使用sql server 自己的函數,方便快捷又省事。不過就有個小事項要注意,一直以來都是使用英文版的作業系統和英文版的SQLSERVER, 在設定資料表的密碼欄位類型都是隨便的VARCHAR類型,再配合PWDENCRYPT 和PWDCOMPARE 兩個內建函數就搞定了!但是問題就是,現在使用的是中文版的作業系統和中文版的資料庫,資料庫的字元集都變成中文字元集了。這個密碼欄位的類型使用varchar
Time of Update: 2018-12-07
SQL server有一個sql profiler可以即時Tracing Service器執行的SQL語句,這在很多時候調試錯誤非常有用。例如:別人寫的複雜代碼、生產系統、無調試環境、無原代碼... ... 查了一下資料,My SQL可以用下面方法跟蹤sql 語句,以下方法以Windows平台為例,linux雷同: 1
Time of Update: 2018-12-07
SQL
Time of Update: 2018-12-07
有一張新聞資料表tb_news,該表有欄位news_id int, news_type int,前者是主鍵,後者是新聞所屬欄目ID,現在要求是這樣:給定一個字串a_right,該字串中包含多個新聞欄目ID值,即news_type,並且儲存格式是'b'+news_type+'v',各ID值之間以逗號相隔,例如:b1v, b2v,
Time of Update: 2018-12-07
轉載自http://www.cnblogs.com/wyforumid/archive/2008/02/22/1077690.html在預存程序中使用事務,以下為模板: CREATE PROCEDURE testProAS /**//* ------- 事務開始---------- */ BEGIN TRANSACTION tran_test /**//* -------- 儲存事務----------*/ SAVE TRANSACTION tran_test /**//* --------
Time of Update: 2018-12-07
昨天有人在群裡討論SQL Server返回最後一個標識值的三個函數:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY,在些作個標記和小結。 其實MSDN對此有官方解釋:這三個函數都返回最後產生的標識值。 但是,上述每個函數中定義的“最後”的範圍和會話有所不同。 1、IDENT_CURRENT 返回為某個會話和當前範圍中的指定表產生的最新標識值。 如果 IDENT_CURRENT 值為 NULL(因為表從未包含行或已被截斷),IDENT_CURRENT
Time of Update: 2018-12-07
企業級的資料庫應用大多部署在RAID磁碟陣列的伺服器上,這樣能提高磁碟的訪問效能,並能夠實現容錯/容災。RAID(冗餘磁碟陣列),簡單理解,就是拿一些廉價的硬碟來做成陣列。其目的無非是為了擴充儲存容量,提升讀寫效能,實現資料冗餘(備份容災)。就像很早就有老外拿N台舊PC,做成一個強大的“伺服器叢集”。RAID技術誕生於1987年,由美國加州大學伯克利分校提出。主流的大概可以分為幾個層級:RAID 0,RAID 1,RAID 5,RAID 10
Time of Update: 2018-12-07
一. 為什麼要引入鎖 多個使用者同時對資料庫的並行作業時會帶來以下資料不一致的問題: 丟失更新 A,B兩個使用者讀同一資料並進行修改,其中一個使用者的修改結果破壞了另一個修改的結果,比如訂票系統 髒讀 A使用者修改了資料,隨後B使用者又讀出該資料,但A使用者因為某些原因取消了對資料的修改,資料恢複原值,此時B得到的資料就與資料庫內的資料產生了不一致 不可重複讀取 A使用者讀取資料,隨後B使用者讀出該資料並修改,此時A使用者再讀取資料時發現前後兩次的值不一致
Time of Update: 2018-12-07
擷取某欄位或幾個欄位有重複的資料,可限定重複幾條select field1,field2 from table group by field1,field2 having count(field1)>1擷取某欄位不重複的最新記錄select top * from table a where id in(select max(id) from table b group by field) order by id desc擷取某欄位的重複數select count(field) from
Time of Update: 2018-12-07
1.命令列匯入大檔案SQL指令碼:osql -s 192.168.0.97 -u sa -p 123 -d job -i J:\PersonTb1_edit.sql2.常用大量查詢使用視圖,會對提速效果明顯,而且可以大量減少查詢次數,記住,資料庫查詢次數,往往是最大影響速度的因素,千萬要正視。3.如果希望對列加入唯一判斷,但又不想對NULL生效,就也是說NULL可以重複存在,就不能用UNIQUE唯一約束了,需要用觸發器實現.樣本:CREATE trigger
Time of Update: 2018-12-07
SQL Server 管理常用的SQL和T-SQL(二)1. 查看資料庫的版本 select @@version 常見的幾種SQL SERVER打補丁後的版本號碼: 8.00.194 Microsoft SQL Server 2000 8.00.384 Microsoft SQL Server 2000 SP1 8.00.532 Microsoft SQL Server 2000 SP2 8.00.760
Time of Update: 2018-12-07
1)只需要提供Sql語句和每頁的記錄數,頁數就可以了2)速度超快喲,100W記錄1~3秒就分出來了3)對於預存程序特別好用--//調用的方式表exec up_zbh_DivPageBySql 'select * from 表',10,3預存程序exec up_zbh_DivPageBySql 'exec 預存程序',10,1 --//我吧它封裝成一個預存程序,調用的時候方便的很哈!!create procedure up_zbh_DivPageBySql @strSql varchar(8000
Time of Update: 2018-12-07
首先開啟SQL Server2005服務 建立一個項目: 選擇需要部署的資料庫 新增一個類 /****************************************************************** * Copyright(c) * Description : 資料加密及解密類 * CreateDate : 2009-05-22 * Creater : Oliver.Dong * LastChangeDate: *
Time of Update: 2018-12-07
(1)Master資料庫是SQL Server系統最重要的資料庫,它記錄了SQL Server系統的所有系統資訊。這些系統資訊包括所有的登入資訊、系統設定資訊、SQL Server的初始化資訊和其他系統資料庫及使用者資料庫的相關資訊。因此,如果 master 資料庫不可用,則 SQL Server 無法啟動。在 SQL Server 2005 中,系統對象不再儲存在 master 資料庫中,而是儲存在 Resource 資料庫中。(2)model 資料庫用作在 SQL Server
Time of Update: 2018-12-07
我們設計表時,在欄位是否允許Null值這個問題上,有時會爭論一番。資料庫牛人Kalen Delaney則給了一下建議 1,永遠不要在使用者表中允許NULL值 2,在使用者表定義中包含一個NOT NULL限制 3,不要依賴資料庫屬性來控制NULL值的行為 對於第一點,我們反向說,如果允許NULL,會給我們帶來什麼影響。 1,SQL
Time of Update: 2018-12-07
一."SQL Server 不存在或訪問被拒絕" 這個是最複雜的,錯誤發生的原因比較多,需要檢查的方面也比較多. 一般說來,有以下幾種可能性: 1,SQL Server名稱或IP地址拼字有誤 2,伺服器端網路設定有誤 3,用戶端網路設定有誤 要解決這個問題,我們一般要遵循以下的步驟來一步步找出導致錯誤的原因. 首先,檢查網路物理串連 ping <伺服器IP地址/伺服器名稱> 如果 ping <伺服器IP地址>