(1)
數據記錄篩選: sql= "select
* from 數據表 where 字段名=字段值 order by 字段名 [desc]" sql= "select
* from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql= "select
top 10 * from 數據表 where 字段名 order by 字段名 [desc]" sql= "select
* from 數據表 where 字段名 in ('值1','值2','值3')" sql= "select
* from 數據表 where 字段名 between 值1 and 值2" (2)
更新數據記錄: sql= "update
數據表 set 字段名=字段值 where 條件表達式" sql= "update
數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式" (3)
刪除數據記錄: sql= "delete
from 數據表 where 條件表達式" sql= "delete
from 數據表" (將數據表所有記錄刪除) (4)
添加數據記錄: sql= "insert
into 數據表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)" sql= "insert
into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表) (5)
數據記錄統計函數: AVG (字段名)
得出一個表格欄平均值 COUNT (*|字段名)
對數據行數的統計或對某一欄有值的數據行數統計 MAX (字段名)
取得一個表格欄最大的值 MIN (字段名)
取得一個表格欄最小的值 SUM (字段名)
把數據欄的值相加 引用以上函數的方法: sp_helpdb
查看數據庫 go use 數據庫名 go select *
from sysobjects
where xtype= 'u' 查看數據庫中有什麼數據表 go sp_help
數據表名 查看數據表的結構 go sql= "select
sum(字段名) as 別名 from 數據表 where 條件表達式" set rs=conn.excute(sql) 用
rs( "別名" )
獲取統的計值,其它函數運用同上。 (5)
數據表的建立和刪除: CREATE TABLE 數據表名稱(字段1
類型1(長度),字段2 類型2(長度) …… ) 例: CREATE TABLE tab01( name varchar (50),datetime
default now()) DROP TABLE 數據表名稱
(永久性刪除一個數據表) 4.
記錄集對象的方法: rs.movenext
將記錄指針從當前的位置向下移一行 rs.moveprevious
將記錄指針從當前的位置向上移一行 rs.movefirst
將記錄指針移到數據表第一行 rs.movelast
將記錄指針移到數據表最後一行 rs.absoluteposition=N
將記錄指針移到數據表第N行 rs.absolutepage=N
將記錄指針移到第N頁的第一行 rs.pagesize=N
設置每頁爲N條記錄 2、更改表格 ALTER TABLE table_name
ADD COLUMN column_name
DATATYPE 說明:增加一個欄位(沒有刪除某個欄位的語法。 ALTER TABLE table_name ADD PRIMARY KEY (column_name) 說明:更改表得的定義把某個欄位設爲主鍵。 ALTER TABLE table_name DROP PRIMARY KEY (column_name) 說明:把主鍵的定義刪除。 3、建立索引 CREATE INDEX index_name
ON table_name
(column_name) 說明:對某個表格的欄位建立索引以增加查詢時的速度。 4、刪除 DROP table_name DROP index_name 二、的資料形態
DATATYPEs smallint 16
位元的整數。 interger 32
位元的整數。 decimal (p,s) p
精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數 點後有幾位數。如果沒有特別指定,則系統會設爲
p=5; s=0 。 float 32位元的實數。 double 64位元的實數。 char (n) n
長度的字串,n不能超過 254。 varchar (n) 長度不固定且其最大長度爲
n 的字串,n不能超過 4000。 graphic(n) 和
char (n)
一樣,不過其單位是兩個字元 double -bytes,
n不能超過127。這個形態是爲 了支援兩個字元長度的字體,例如中文字。 vargraphic(n) 可變長度且其最大長度爲
n 的雙字元字串,n不能超過 2000。 date 包含了
年份、月份、日期。 time 包含了
小時、分鐘、秒。 timestamp 包含了
年、月、日、時、分、秒、千分之一秒。 三、資料操作
DML (Data Manipulation Language) 資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料( insert )、查詢資料(query)、更改資料( update )
、刪除資料( delete )四種模式,以下分
別介紹他們的語法: 1、增加資料: INSERT INTO table_name
(column1,column2,...) valueS (
value1,value2, ...) 說明: 1.若沒有指定 column 系統則會按表格內的欄位順序填入資料。 2.欄位的資料形態和所填入的資料必須吻合。 3.table_name
也可以是景觀 view_name。 INSERT INTO table_name
(column1,column2,...) SELECT columnx,columny,...
FROM another_table 說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。 2、查詢資料: 基本查詢 SELECT column1,columns2,... FROM table_name 說明:把table_name
的特定欄位資料全部列出來 SELECT * FROM table_name WHERE column1
= xxx [ AND column2
> yyy] [ OR column3
<> zzz] 三)交叉連接 交叉連接不帶 WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數 據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。 例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等 於6*8=48行。 SELECT type,pub_name FROM titles
CROSS JOIN publishers ORDER BY type UNION 運算符可以將兩個或兩個以上上 SELECT 語句的查詢結果集合合併成一個結果集合顯示,即執行聯合查詢。 UNION 的語法格式爲: select_statement UNION [ ALL ]
selectstatement [ UNION [ ALL ]
selectstatement][…n] 其中selectstatement爲待聯合的 SELECT 查詢語句。 ALL 選項表示將所有行合併到結果集合中。不指定該項時,被聯合查詢結果集合中的重複行將只保留一 行。 聯合查詢時,查詢結果的列標題爲第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語 句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。 在使用 UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選 擇表達式應具有相同的數據類型,或是可以自動將它們轉換爲相同的數據類型。在自動轉換時,對於數值類 型,系統將低精度的數據類型轉換爲高精度的數據類型。 在包括多個查詢的 UNION 語句中,其執行順序是自左至右,使用括號可以改變這一執行順序。例如: 查詢1
UNION (查詢2
UNION 查詢3) INSERT 語句 用戶可以用 INSERT 語句將一行記錄插入到指定的一個表中。例如,要將僱員John
Smith的記錄插入到本例的表中,可以使用如下語句: INSERT INTO EMPLOYEES
valueS
( 'Smith' , 'John' , '1980-06-10' ,
'Los
Angles' ,16,45000); 通過這樣的 INSERT 語句,系統將試着將這些值填入到相應的列中。這些列按照我們創建表時定義的順序排列。在本例中,第一個值“Smith”將填到第一個列LAST_NAME中;第二個值“John”將填到第二列FIRST_NAME中……以此類推。 我們說過系統會“試着”將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字符串填入到類型爲數字的列中),系統將拒絕這一次操作並返回一個錯誤信息。 如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因爲SQL提供對事務的支持。一次事務將數據庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之爲回退)到此事務之前的狀態。
回到原來的 INSERT 的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字符串和日期類型的值都要用單引號來區別。爲了增加可讀性而在數字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。 同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標識符。 對於日期類型,我們必須使用SQL標準日期格式(yyyy-mm-dd) --設置用戶訪問數據庫的形式
Alter database TestAA set SINGLE_USER with rollback immediate --設置單用戶訪問數據庫 Alter database TestAA
set RESTRICTED_USER
with rollback immediate RESTRICTED_USER
只允許 db_owner 固定數據庫角色成員以及 dbcreator 和 sysadmin 固定服務器角色成員連接到數據庫,不過對連接數沒有限制。在
ALTER DATABASE 語句的終止子句所指定的時間範圍內,所有數據庫連接都將被斷開。在數據庫轉換到
RESTRICTED_USER 狀態後,不合格用戶所做的連接嘗試將被拒絕。 Alter database TestAA
set MULTI_USER
with rollback immediate
--設置用戶正常訪問 --設置數據庫恢復模式 sql
2008 不支持nolog 和 truncate_only 如果要截斷日誌的話,需要先把數據庫搞成簡單模型,然後在收縮日誌,在改成完全模式。備份一次數據庫。 Alter database set recovery
{simple/ full /bulk_logged} dbcc
shrinkfile( 'filename' ,10) --導出數據到文本 --EXEC
master..xp_cmdshell 'bcp "Select cdoc_id,csubject from cmsdbquery..tbl_article" queryout c:\DT.txt -c -SXXXXX -Usa -PXXXXX' --跟蹤腳本需要打開的選項 set statistics io
on set statistics profile
on set statistics time on --釋放過程高速緩存將導致重新編譯某些部分 DBCC
FREEPROCCACHE --從緩衝池中刪除所有清除緩衝區 不用關閉和重啓服務器或者服務 DBCC
DROPCLEANBUFFERS --以報表形式顯示有關過程高速緩存的信息 DBCC
PROCCACHE --顯示指定表上的指定目標的當前分佈統計信息 DBCC
SHOW_STATISTICS ( table ,
target ) --從遠程服務器打開數據庫連接取數據 SELECT top 20
* FROM OPENDATASOURCE( 'SQLOLEDB' , 'Data
Source=xxx.xxx.xx.x,port;User ID=sa;Password=xxxxxxx' ).[product].dbo.tableaa data
source 好像不能有中括號,好多網友的opendatasource不能用就是這個原因 SELECT * FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0' , 'Data
Source="c:\bbb.xls";User ID=;Password=;Extended properties=Excel 5.0' )...[sheet1$] 文本的查詢 文件必須是,號分割文件
HDR=YES
的時候,第一行被認爲是字段名 HDR= NO 的時候,第一行被認爲是數據 select *
from OPENROWSET( 'MICROSOFT.JET.OLEDB.4.0' , 'Text;HDR=NO;DATABASE=C:\'
--c:\是目錄 ,aaa#txt)
--文件名 BULK
INSERT xxxx_trs.dbo.xxxx_day FROM
' F:\BI_DsssDayAddin_cms_IN.csv '
WITH
(
FIELDTERMINATOR
=' , ',
ROWTERMINATOR
=' \n '
)
--查看sql版本 SELECT
SERVERPROPERTY(' productversion '),SERVERPROPERTY(' productlevel '),SERVERPROPERTY(' edition ') --初始化標識列 DBCC
CHECKIDENT (ProductPicture, RESEED, 1) --數據庫2個比較常用的函數 DATABASEPROPERTY
返回數據庫狀態的值 select
DATABASEPROPERTY(dbname, ' issingleuser ')
返回數據庫是不是單用戶模式 HAS_DBACCESS
( ' database_name '
) 返回信息,說明用戶是否可以訪問指定的數據庫 --T終端用戶的人 Query
user 查詢當前登錄用戶 LogOff
sessionid 註銷會話 Tsdiscon
sessionid 斷開某個會話的連接 命令行下需要先建立一個ipc$會話 net
use \\10.168.0.21\c$ "XX" /user:administrator query
user /server 10.168.0.21 tsdiscon
2 /server 10.168.0.21 創建與刪除SQL約束或字段約束。SQL約束控制 1)禁止所有表約束的SQL select
' alter table '+name+' nocheck
constraint all '
from sysobjects where type=' U ' 2)刪除所有表數據的SQL select
' TRUNCATE TABLE '+name
from sysobjects where type=' U ' 3)恢復所有表約束的SQL select
' alter table '+name+' check constraint all '
from sysobjects where type=' U ' 4)刪除某字段的約束 declare
@name varchar(100) --DF爲約束名稱前綴 select
@name=b.name from syscolumns a,sysobjects b where a.id=object_id(' 表名 ')
and b.id=a.cdefault and a.name=' 字段名 '
and b.name like ' DF% ' --刪除約束 alter
table 表名 drop constraint @name --爲字段添加新默認值和約束 ALTER
TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]對字段約束進行更改 --刪除約束 ALTER
TABLE tablename Drop
CONSTRAINT 約束名 --修改表中已經存在的列的屬性(不包括約束,但可以爲主鍵或遞增或唯一) ALTER
TABLE tablename alter
column 列名 int not null --添加列的約束 ALTER
TABLE tablename ADD
CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名 --添加範圍約束 alter
table tablename add check(性別 in (' M ',' F ')) 創建一個庫 CREATE
DATABASE g2 ON PRIMARY (
NAME = ' g2 ',
FILENAME = ' E:\benet\data1\g1.mdf '
, SIZE = 307200KB , FILEGROWTH = 1024KB ) LOG
ON (
NAME = ' g2_log ',
FILENAME = ' E:\benet\data1\g1_log.ldf '
, SIZE = 1024KB , FILEGROWTH = 10%) 創建一個表
CREATE
TABLE biao2 ( id
int NOT NULL, xingming
char(10) NOT NULL, xingbie
float(53) NOT NULL, nianling
int NOT NULL, chengji
float(53) NULL ) 查詢 select
* from biao1 where
chengji between 400 and 600 select
* from biao1 where
nianling like 55 select
* from biao1 where
nianling between 10 and 100 select
* from biao1 where
id = 5 insert
into biao1 values
(6 ,' 原遲 ',1
, 100 , 1542.22) update
biao1 set
chengji = chengji + 1000 select
* from biao1 delete from
biao1 where
id = 1 select
* from biao1 select
* from biao1 排序 order
by no asc update
biao2 set
zongji = shuxue + yuwen + huaxue where
xingming = ' a ' insert
into biao1 values (7,' 骨血松濤 ',1
, 700) select
* from biao1 where
xingming like ' %血% ' select
distinct xingbie from biao1 alter
table biao1 drop
column chengji 刪除一列 alter
table biao2 add liehao
int select
* from biao1,biao2 where
biao1.id=biao2.id 將表一和表二聯繫起來,建立主索引, 注意小數點的應用 select
* from biao1 inner
join biao2 on
biao1.id=biao2.id 和上面的一樣 查詢時間 select
* from biao2 where
riqi between ' 1993-01-01
00:00:00.000 '
and ' 1994-6-29
00:00:00.000 ' select
xingming from biao2 where
bumen =' xiaoshou '
and xingbie =' na ' delete from
biao2 where
xingming=' jinpeng ' select
id ,xingming into biao2_backup from
biao2 where
xingbie=' na '
備份選擇的數據 create
view shitu as select
xingming ,riqi from
biao2 where
xingbie = ' na '
創建一個自己匹配的視圖 視圖相當於是一個符合你的目的的一個查詢結果集. 他不佔用空間,方便你以後的查找. 多文件還原代碼 ESTORE
DATABASE [benet] FROM DISK = N' G:\bak\wz.bak '
WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 GO RESTORE
DATABASE [benet] FROM DISK = N' G:\bak\cy.bak '
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10 GO 恢復數據庫
benet 來自文件 DISK = N' G:\bak\cy.bak '
with 文件數1個, NORECOVERY
指定不發生回滾。從而使前滾按順序在下一條語句中繼續進行。 在這種情況下,還原順序可還原其他備份,並執行前滾。 REPLACE覆蓋 A.
還原完整數據庫 注意:
MyAdvWorks
數據庫僅供舉例說明。 以下示例還原完整數據庫備份。 複製代碼 RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 注意:
對於使用完全恢復模式或大容量日誌恢復模式的數據庫,在大多數情況下,SQL
Server 2005 都要求您在還原數據庫前備份日誌尾部。有關詳細信息,請參閱尾日誌備份。 B.
還原完整數據庫備份和差異備份 以下示例還原完整數據庫備份後還原差異備份。另外,以下示例還說明如何還原媒體上的另一個備份集。差異備份追加到包含完整數據庫備份的備份設備上。 複製代碼 RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 WITH
NORECOVERY RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 WITH
FILE = 2 C.
使用 RESTART 語法還原數據庫 以下示例使用
RESTART 選項重新啓動因服務器電源故障而中斷的 RESTORE 操作。 複製代碼 --
This database RESTORE halted prematurely due to power failure. RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 --
Here is the RESTORE RESTART operation. RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 WITH RESTART D.
還原數據庫並移動文件 以下示例還原完整數據庫和事務日誌,並將已還原的數據庫移動到
C:\Program Files\Microsoft SQL Server\MSSQL\Data 目錄下。 複製代碼 RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1 WITH
NORECOVERY, MOVE
' MyAdvWorks '
TO ' c:\Program
Files\Microsoft SQL Server\MSSQL\Data\NewAdvWorks.mdf ', MOVE
' MyAdvWorksLog1 ' TO
' c:\Program
Files\Microsoft SQL Server\MSSQL\Data\NewAdvWorks.ldf ' RESTORE
LOG MyAdvWorks FROM
MyAdvWorksLog1 WITH
RECOVERY E.
使用 BACKUP 和 RESTORE 創建數據庫的副本 以下示例使用
BACKUP 和 RESTORE 語句創建 AdventureWorks 數據庫的副本。MOVE 語句使數據和日誌文件還原到指定的位置。RESTORE FILELISTONLY 語句用於確定待還原數據庫內的文件數及名稱。該數據庫的新副本稱爲 TestDB。有關詳細信息,請參閱 RESTORE FILELISTONLY (Transact-SQL)。 複製代碼 BACKUP
DATABASE AdventureWorks TO
DISK = ' C:\AdventureWorks.bak ' RESTORE
FILELISTONLY FROM
DISK = ' C:\AdventureWorks.bak ' RESTORE
DATABASE TestDB FROM
DISK = ' C:\AdventureWorks.bak ' WITH
MOVE ' AdventureWorks_Data '
TO ' C:\testdb.mdf ', MOVE
' AdventureWorks_Log '
TO ' C:\testdb.ldf ' GO F.
使用 STOPAT 語法還原到時間點和使用多個設備進行還原 以下示例將數據庫還原到它在
2005 年 4 月 15 日中午 12 點時的狀態,並顯示涉及多個日誌和多個備份設備的還原操作。 複製代碼 RESTORE
DATABASE MyAdvWorks FROM
MyAdvWorks_1, MyAdvWorks_2 WITH
NORECOVERY, STOPAT = ' Apr
15, 2005 12:00 AM ' RESTORE
LOG MyAdvWorks FROM
MyAdvWorksLog1 WITH
NORECOVERY, STOPAT = ' Apr
15, 2005 12:00 AM ' RESTORE
LOG MyAdvWorks FROM
MyAdvWorksLog2 WITH
RECOVERY, STOPAT = ' Apr
15, 2005 12:00 AM ' G.
將事務日誌還原到標記 以下示例將事務日誌還原到名爲
ListPriceUpdate 的標記事務中的標記處。 複製代碼 USE
AdventureWorks GO BEGIN
TRANSACTION ListPriceUpdate WITH
MARK ' UPDATE Product
list prices ' GO UPDATE
Production.Product SET
ListPrice = ListPrice * 1.10 WHERE
ProductNumber LIKE ' BK-% ' GO COMMIT
TRANSACTION ListPriceUpdate GO --
Time passes. Regular database --
and log backups are taken. --
An error occurs. USE
master GO RESTORE
DATABASE AdventureWorks FROM
AdvWorks1 WITH
FILE = 3, NORECOVERY GO RESTORE
LOG AdventureWorks FROM
AdvWorks1 WITH
FILE = 4, STOPATMARK
= ' ListPriceUpdate ' H.
使用 TAPE 語法還原 以下示例從
TAPE 備份設備還原完整數據庫備份。 複製代碼 RESTORE
DATABASE MyAdvWorks FROM
TAPE = ' \\.\tape0 ' I.
使用 FILE 和 FILEGROUP 語法還原 以下示例還原一個包含兩個文件、一個文件組和一個事務日誌的數據庫。 複製代碼 RESTORE
DATABASE MyAdvWorks FILE
= ' MyAdvWorks_data_1 ', FILE
= ' MyAdvWorks_data_2 ', FILEGROUP
= ' new_customers ' FROM
MyAdvWorks_1 WITH
NORECOVERY --
Restore the log backup. RESTORE
LOG MyAdvWorks FROM
MyAdvWorksLog1 J.
恢復到數據庫快照 以下示例將數據庫恢復到數據庫快照。此示例假定該數據庫當前僅存在一個快照。有關創建此數據庫快照的示例,請參閱如何創建數據庫快照
(Transact-SQL)。 注意:
恢復到快照將刪除所有全文目錄。 複製代碼 USE
master RESTORE
DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = ' AdventureWorks_dbss1800'; GO |