create table [表名] [自動編號字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default '默認值' null ,
[字段2] ntext null ,
[字 段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null , Drop table [表名]插入數據:
INSERT INTO [表名] (字段1,字段2) VALUES (100,'51Windows.Net')刪除數據:
DELETE FROM [表名] WHERE [字段名]>100更新數據:
UPDATE [表名] SET [字段1] = 200,[字段2] = '51Windows.Net' WHERE [字段三] = 'HAIWA'新增字段:
ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL刪除字段:
ALTER TABLE [表名] DROP COLUMN [字段名]修改字段:
ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL重命名表:(Access 重命名表,請參考文章:在Access數據庫中重命名表)
sp_rename '表名', '新表名', 'OBJECT'新建約束:
ALTER TABLE [表名] ADD CONSTRAINT 約束名 CHECK ([約束字段] <= '2000-1-1')刪除約束:
ALTER TABLE [表名] DROP CONSTRAINT 約束名新建默認值
ALTER TABLE [表名] ADD CONSTRAINT 默認值名 DEFAULT '51Windows.Net' FOR [字段名]刪除默認值
ALTER TABLE [表名] DROP CONSTRAINT 默認值名刪除SQL Server 中的日志,減小數據庫文件大小
dump transaction 數據庫名 with no_log
backup log 數據庫名 with no_log
dbcc shrinkdatabase(數據庫名)
exec sp_dboption '數據庫名', 'autoshrink', 'true'
自增列不能直接修改,必須將原有ID列刪除,然後重新添加一列具有identity屬性的ID字段,語句如下alter table 表名
drop column IDalter table 表名
add ID int identity(1,1)修改日期字段為Datatime類型,首先要保證表中無數據,或現有數據可以直接轉換為datetime類型,否則修改字段類型就會失敗。
alter table 表名
alter column 日期字段名 datetime1, 使用一個數據庫之前要引用他:use 數據庫名
2, exists()判斷子查詢的結果是否存在,返回true or false
3, object_id('對象名') 返回該對象名對應的Id,該id存儲在sysobjects表中。
4, 建表時自動建立主鍵約束:create table a(b char(4),c int,constraint 主鍵名 primary key(c))
或者:create table a(a char(4) cint primary key) 或者:create table a(a char(4) cint constraint 主鍵名 primary key)
5, 創建索引:create index 索引名 on 表名(字段名)
6, 為一個表添加外鍵:alter table 表名 add constraint 外鍵名 foreign key(字段)references 表名(字段)
7, identity(seed,range) 創建一個標識列,與null,not null並列。seed表示種子,即初始值;range表示增長幅度。
8, 局部臨時表 #xxx ,只能被當前會話訪問,在該會話結束後自動消失。
9, 全局臨時表 ##xx , 可以供多個用戶使用,在該會話結束後自動消失。10,為表 添加/修改/刪除列 :alter table 表名 add 列名 type/alter column 列名 newtype/drop 列名
11,可以通過多次安裝sqlserver為其創建多個實例
12,用系統過程 sp_reZGXX_XM 重新命名表和列:
sp_reZGXX_XM 原表名,新表名
sp_reZGXX_XM "表名.原列名",新列名
13,如果想顯示的在identity列中插入值,則需要先設置:set identity_insert 表名 on
插入完畢後最好設置:set identity_insert 表名 off
14, 利用writetext往text 或 image列中寫入值:declare @var varbinary(16)
select @var=textptr(c) from test where a=10
writetext test.c @var 'zhongguo '注意:使用Writetext,一般需要首先這樣設置:sp_dboption 數據庫名,'SELECT into/bulkcopy',true
15, truncate table 表名 刪除表格的所有數據,速度很快。
16,統計函 數中除了count(*) 之外,都忽略空值(null).
17, 由於text和image類型數據很長,在查詢之前可以通過設置全局變量textsize來指定返回數據的長度,set textsize 50
如 果想查閱全局變量textsize的值:select @@textsize18, 通過reaDtext 讀取text的數據:declare @var varbinary(16)
select @var=textptr(c) from test where a=10
readtext test.c @var 4 3
此例返回第5,6,7個字符。應為長度要求是3,起始是0, 所以4表示從第五個字符讀起。
其中textptr是返回指定的text,ntext,image列的指針,一般保存到varbinary類型的 變量中
19, like 語句中,可以指定簡單的正則表達式,[a-z]表示一個任意字母,[^a-z]表示一個非字母字符
20,like 也是唯一可以在text列上使用的操作符
21,邏輯操作符優先級:NOT > AND > OR
22, 在group by 一個記錄集時,所有的null組成一組。
23,帶有group by 子句的 select中可以有where子句,但是where 子句必須放在group by 前面。
24,如果group by 子句中用了all,即 group by all xxx ,則不符合檢索條件的記錄也顯示,但不參與統計。
25,having 中,只能包含 group by子句中指定的列,也可以包含統計函數。where中可指定任何列,但是不能用統計函數
26, having 子句從最終結果中將不滿足該條件的分組去掉
27,不帶group by子句時也可以使用having子句,並將整個查詢結果作為一個組,但是,由於出現在選擇列表中的列
和出現在having子句中的列必須是 group by 子句中的列,所以,當不帶group by子句時,不能在having子句和 28, 當在group by子句後指定order by子句時,只能在order by子句中指定group by子句中的列或者統計函數
29,在進 行union運算時,自動刪除結果中的重復行,如果使用all選項 ,則可以將所有行顯示在結果中:union all
30, 在union時,合並結果集中的列名有第一個查詢給出,所以後面進行排旬時一定要注意order by 子句中的字段名
31,可以通過 select fIEldslist into 新表名 from 表名,來創建一個新表,並將當前表中的數據全部插入到新
表中,但是做這個操 作之前需要保證數據庫選項 select into/bulkcopy 設置為true。方法如下:
use master
sp_dboption 數據庫a名,"select into/bulkcopy",true
use 數據庫a名
checkpoint 如果要將統計結果或者計算結果插入到新表中,必須以標題的形式給出列名,如:
select a,b=avg(c) into mm from nn group by a
32, 隨即取出N條記錄的方法:select top N * from 表名 order by newid()33,創建唯一約束:create table a(b int not nul constraint 約束名 unique,c char(10) null)
或者:create table a(b int,c char(10),constraint 約束名 unique(b))34,在SQL Server表格選定一個單元格,ctrl+0即可將單元格的值置為null35,為變量賦值方法:set @xxx=??? ,如果變量的值取自一個查詢的話,需要用select, 如:select @xxx=??? from ??? where ????
如果要返回一個記錄集,但是不是從一個表格,而是全部是系統變量或自定義變量組成。 則不必寫from子句:select ??,??,??
36,創建一個返回一張表的函數:
create function fn_Tree(@Id int)
returns table @tb (id int ,fid int)
as
begin
insert @tb select id,fid from tablename where fid=@id
while exists (select 1 from tablename where fid in (select id from @tb)
and id not in (select id from @tb) )
insert @tb select id,fid from tablename where fid in (select id from @tb)
and id not in (select id from @tb)
return
end表的字段為id,fid
insert @tb select 語句,將查詢結果插入到當前的表格(@tb)中調用:
select * from dbo.fn_Tree(0)
go
select * from dbo.fn_Tree(1
go
37,一個日期格式轉換的例子,一般可以用convert,cast等函數轉換,但是這個例子沒有:
declare @a varchar(50)
declare @b varchar(50)
declare @c int
declare @d varchar(50)
declare @e varchar(50)set @a='1/20/03 10:06:41:59'
set @b=reverse(@a)
set @c=charindex('/',@b)
set @d=stuff(@b,@c,0,'02')
set @e=reverse(@d)
select @a,@b,@c
select @d,@e