技術 | SQL語句大全

語 句 功 能

數據操作

SELECT——從數據庫表中檢索數據行和列
INSERT——向數據庫表添加新數據行
DELETE——從數據庫表中刪除數據行
UPDATE——更新數據庫表中的數據

數據定義

CREATE TABLE——創建一個數據庫表
DROP TABLE——從數據庫中刪除表
ALTER TABLE——修改數據庫表結構
CREATE VIEW——創建一個視圖
DROP VIEW——從數據庫中刪除視圖
CREATE INDEX——為數據庫表創建一個索引
DROP INDEX——從數據庫中刪除索引
CREATE PROCEDURE——創建一個存儲過程
DROP PROCEDURE——從數據庫中刪除存儲過程
CREATE TRIGGER——創建一個觸發器
DROP TRIGGER——從數據庫中刪除觸發器
CREATE SCHEMA——向數據庫添加一個新模式
DROP SCHEMA——從數據庫中刪除一個模式
CREATE DOMAIN——創建一個數據值域
ALTER DOMAIN——改變域定義
DROP DOMAIN——從數據庫中刪除一個域

數據控制

GRANT——授予用戶訪問權限
DENY——拒絕用戶訪問
REVOKE——解除用戶訪問權限

事務控制

COMMIT——結束當前事務
ROLLBACK——中止當前事務
SET TRANSACTION——定義當前事務數據訪問特征

程序化SQL

DECLARE——為查詢設定游標
EXPLAN——為查詢描述數據訪問計劃
OPEN——檢索查詢結果打開一個游標

FETCH——檢索一行查詢結果
CLOSE——關閉游標
PREPARE——為動態執行準備SQL 語句
EXECUTE——動態地執行SQL 語句
DESCRIBE——描述準備好的查詢

局部變量

declare @id char(10)

set @id = '10010001'

select @id = '10010001'

全局變量

必須以@@開頭

IF ELSE

declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y'——打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

CASE

use pangu
update employee
set e_wage =
case
when job_level = .1. then e_wage1.08
when job_level = .2. then e_wage
1.07
when job_level = .3. then e_wage1.06
else e_wage
1.05
end

WHILE CONTINUE BREAK

declare @x int @y int @c int
select @x = 1 @y=1

while @x < 3
begin
print @x——打印變量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c——打印變量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

WAITFOR

例 等待1 小時2 分零3 秒后才執行SELECT 語句

waitfor delay .01:02:03.
select * from employee

例 等到晚上11 點零8 分后才執行SELECT 語句

waitfor time .23:08:00.
select * from employee
SELECT
select (列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a#zA#Z]%'——####### ([]指定值的范圍)
stockname like '[^F#M]%'——####### (^排除指定范圍)
######### 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock
** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)

order by stockid desc(asc)——####### 排序,desc#降序,asc#升序
order by 1,2——####### by列號
stockname = (select stockname from stock_information where stockid = 4)
######### 子查詢
######### 除非能確保內層select只返回一個行的值,
######### 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name——####### distinct指定檢索獨有的列值,
不重復
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count() from table_name group by stockname
######### group by 將表按行分組,指定列中有相同的值
having count(
) = 2——####### having選定指定的組
select *
from table1, table2
where table1.id = table2.id——###### 左外部連接,table1中有的而table2中沒有得
以null表示
table1.id =
table2.id——###### 右外部連接
select stockname from table1
union [all]——### union合并查詢結果集,all#保留重復行
select stockname from table2
insert
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)###value為select語句
update
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default

Stockname = null
Stocknumber = Stockname + 4
delete
delete from table_name where Stockid = 3
truncate table_name——######### 刪除表中所有行,仍保持表的完整性
drop table table_name——############# 完全刪除表
alter table——# 修改數據庫表結構
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name——## 顯示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select .........——### 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default——## 刪除Stockname的
default約束
function(/常用函數/)**

統計函數####

AVG——求平均值
COUNT——統計數目
MAX——求最大值
MIN——求最小值
SUM——求和

AVG

use pangu
select avg(e_wage) as dept_avgWage

from employee
group by dept_id

MAX

求工資最高的員工姓名

use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)

STDEV()

STDEV()函數返回表達式中所有數據的標準差

STDEVP()

STDEVP()函數返回總體標準差

VAR()

VAR()函數返回表達式中所有值的統計變異數

VARP()

VARP()函數返回總體變異數

算術函數####

/三角函數/
SIN(float_expression)——返回以弧度表示的角的正弦
COS(float_expression)——返回以弧度表示的角的余弦
TAN(float_expression)——返回以弧度表示的角的正切
COT(float_expression)——返回以弧度表示的角的余切
/反三角函數/
ASIN(float_expression)——返回正弦是FLOAT 值的以弧度表示的角

ACOS(float_expression)——返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression)——返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)

返回正切是float_expression1 /float_expres#sion2的以弧度表示的角

DEGREES(numeric_expression)

把弧度轉換為角度返回與表達式相同的數據類型可為

INTEGER/MONEY/REAL/FLOAT 類型

RADIANS(numeric_expression)——把角度轉換為弧度返回與表達式相同的數據類
型可為

INTEGER/MONEY/REAL/FLOAT 類型

EXP(float_expression)——返回表達式的指數值
LOG(float_expression)——返回表達式的自然對數值
LOG10(float_expression)##返回表達式的以10 為底的對數值
SQRT(float_expression)——返回表達式的平方根
/取近似值函數/
CEILING(numeric_expression)——返回>=表達式的最小整數返回的數據類型與表
達式相同可為

INTEGER/MONEY/REAL/FLOAT 類型

FLOOR(numeric_expression)——返回<=表達式的最小整數返回的數據類型與表達
式相同可為

INTEGER/MONEY/REAL/FLOAT 類型

ROUND(numeric_expression)——返回以integer_expression 為精度的四舍五入值返
回的數據

類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型

ABS(numeric_expression)——返回表達式的絕對值返回的數據類型與表達式相同可

INTEGER/MONEY/REAL/FLOAT 類型

SIGN(numeric_expression)——測試參數的正負號返回0 零值1 正數或#1 負數返回
的數據類型

與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型

PI()——返回值為π 即3.1415926535897936
RAND([integer_expression])——用任選的[integer_expression]做種子值得出0#1 間
的隨機浮點數

字符串函數####

ASCII()——函數返回字符表達式最左端字符的ASCII 碼值
CHAR()——函數用于將ASCII 碼轉換為字符

如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值

LOWER()——函數把字符串全部轉換為小寫
UPPER()——函數把字符串全部轉換為大寫
STR()——函數把數值型數據轉換為字符型數據

LTRIM()——函數把字符串頭部的空格去掉
RTRIM()——函數把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()——函數返回部分字符串
CHARINDEX(),PATINDEX()——函數返回字符串中某個指定的子串出現的開始位

SOUNDEX()——函數返回一個四位字符碼

SOUNDEX函數可用來查找聲音相似的字符串但SOUNDEX函數對數字和漢字

均只返回0 值
DIFFERENCE()——函數返回由SOUNDEX 函數返回的兩個字符表達式的值的差

0 兩個SOUNDEX 函數返回值的第一個字符不同

1 兩個SOUNDEX 函數返回值的第一個字符相同

2 兩個SOUNDEX 函數返回值的第一二個字符相同

3 兩個SOUNDEX 函數返回值的第一二三個字符相同

4 兩個SOUNDEX 函數返回值完全相同

QUOTENAME()——函數返回被特定字符括起來的字符串
/select quotename('abc', '{') quotename('abc')
運行結果如下
##################################{
{abc} [abc]
/
REPLICATE()——函數返回一個重復character_expression 指定次數的字符串
/select replicate('abc', 3) replicate( 'abc', #2)
運行結果如下
###########——#########
abcabcabc NULL
/
REVERSE()——函數將指定的字符串的字符排列順序顛倒
REPLACE()——函數返回被替換了指定子串的字符串
/select replace('abc123g', '123', 'def')
運行結果如下
###########——#########
abcdefg
/

SPACE()——函數返回一個有指定長度的空白字符串
STUFF()——函數用另一子串替換字符串指定位置長度的子串

數據類型轉換函數####

CAST() 函數語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
##############################——##########
199 Jan 15 2000

日期函數####

DAY()——函數返回date_expression 中的日期值
MONTH()——函數返回date_expression 中的月份值
YEAR()——函數返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)

函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期

DATEDIFF(<datepart> ,<number> ,<date>)

函數返回兩個指定日期在datepart 方面的不同之處

DATENAME(<datepart> , <date>)——函數以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>)——函數以整數值的形式返回日期的指定部分
GETDATE()——函數以DATETIME 的缺省格式返回系統當前的日期和時間

系統函數####

APP_NAME()——函數返回當前執行的應用程序的名稱
COALESCE()——函數返回眾多表達式中第一個非NULL 表達式的值
COL_LENGTH(<'table_name'>, <'column_name'>)——函數返回表中指定字段的長
度值
COL_NAME(<table_id>, <column_id>)——函數返回表中指定字段的名稱即列名
DATALENGTH()——函數返回數據表達式的數據的實際長度
DB_ID(['database_name'])——函數返回數據庫的編號
DB_NAME(database_id)——函數返回數據庫的名稱

HOST_ID()——函數返回服務器端計算機的名稱
HOST_NAME()——函數返回服務器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])

IDENTITY() 函數只在SELECT INTO 語句中使用用于插入一個identity

column列到新表中
/select identity(int, 1, 1) as column_name
into newtable
from oldtable
/
ISDATE()——函數判斷所給定的表達式是否為合理日期
ISNULL(<check_expression>, <replacement_value>)——函數將表達式中的NULL
值用指定值替換
ISNUMERIC()——函數判斷所給定的表達式是否為合理的數值
NEWID()——函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)

NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時

則返回expression1 的值
sql中的保留字
action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists

fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill

查看全文

常用SQL命令和ASP編程

在進行數據庫操作時,無非就是添加、刪除、修改,這得設計到一些常用的SQL
語句,如下:
SQL常用命令使用方法:
(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 …) valuess (值1,值2,值3 …)"
sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到
目標數據表)
(5) 數據記錄統計函數:
AVG(字段名) 得出一個表格欄平均值

COUNT(|字段名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數據欄的值相加
引用以上函數的方法:
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 數據表名稱 (永久性刪除一個數據表)
在ASP編程時,下面這些語句是必須知道的:
1.連接數據庫
a. ASP與Access數據庫連接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數據庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (
.mdb)};uid=admin;pwd=數據庫密
碼;dbq="&mdbfile
%>
b. ASP與SQL數據庫連接:
<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務器名稱或IP地
址;UID=sa;PWD=數據庫密碼;DATABASE=數據庫名稱
%>

建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,conn,3,2

  1. 記錄集對象的方法:
    rs.movenext 將記錄指針從當前的位置向下移一行
    rs.moveprevious 將記錄指針從當前的位置向上移一行
    rs.movefirst 將記錄指針移到數據表第一行
    rs.movelast 將記錄指針移到數據表最后一行
    rs.absoluteposition=N 將記錄指針移到數據表第N行
    rs.absolutepage=N 將記錄指針移到第N頁的第一行
    rs.pagesize=N 設置每頁為N條記錄
    rs.pagecount 根據 pagesize 的設置返回總頁數
    rs.recordcount 返回記錄總數
    rs.bof 返回記錄指針是否超出數據表首端,true表示是,false為否
    rs.eof 返回記錄指針是否超出數據表末端,true表示是,false為否
    rs.delete 刪除當前記錄,但記錄指針不會向下移動
    rs.addnew 添加記錄到數據表末端
    rs.update 更新數據表記錄
    附:
    常數 常數值 說明
    --------------------------------
    adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運行AddNew、
    Update及Delete等方法
    adLockPrssimistic 2 當數據源正在更新時,系統會暫時鎖住其他用戶的動作,以
    保持數據一致性。
    adLockOptimistic 3 當數據源正在更新時,系統并不會鎖住其他用戶的動作,其
    他用戶可以對數據進行增、刪、改的操作。
    adLockBatchOptimistic 4 當數據源正在更新時,其他用戶必須將CursorLocation
    屬性改為adUdeClientBatch才能對數據進行增、刪、改的操作。

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

SQLSERVER2000功略(4)###自動化管理

發表人:kendy517 | 發表時間: 2007年二月09日, 11:56

面對大量反復的工作,即使一個優秀的管理員也會感到很大的負擔。但為了保持
服務器維持在最佳運行狀態,這些又時不得不作的工作。這時,SQLSERVER想
你所想,提供了自動化的管理措施。在我們工作之前,我們需要了解自動化背后
的好助手—SQLSERVER Agent,這個就是SQLSERVER的代理程序,他是運行在
后臺的服務,可謂是幕后英雄!那他有什么功能呢,如下:
① 作業調度。
② 執行作業。
③ 產生報警。
④ 在指定的事件發生時,通知指定的管理員或操作員。
說到這里,我們就談談自動化中的角色:操作員,作業,警報。
操作員:所謂的操作員只是人名與其通信方式(可有電子郵件地址,呼叫器或
NET SEND的目的地三種)的設置而已。只要將服務器管理人員的聯絡方式都以
操作員設置妥當時,當SQLSERVER遇到各種需要處理的狀況,SQLSERVER
Agent就會通過指定的方式通知管理人員前來完成,以達到及時的排除各種問題。
作業:作業是SQLSERVER Agent諸多功能中最常用的。所謂作業就是可讓
SQLSERVERAgent自動執行的一組操作,它既可以自動執行(這個就涉及到調
度),也可以手動執行。在定義作業必須注意以下內容:作業的名稱,作業的種
類,作業的所有者,作業的說明文字。
警報:就是指針對特殊的事件,要發信給操作員的設置。在作業的設置中的“通
知“頁面中指定了要將作業執行狀態通知操作員時,其實就是在設置警報(如下
圖)
screen.width#333)this.width=screen.width#333" border="0" galleryimg="no" />
在定義警報時,可有兩種設置事件的方式,一種是指明了針對某特定事件,也就
是只要在服務器發生該事件。另一種是指定事件的嚴重度(Serverity),只要是達
到指定嚴重程度的所有事件,SQLSERVER Agent就會發信通知操作員。
了解了概念,就是動手的時候了,這些我們就以圖片給與說明,第一個我們新建
“操作員“,過程如下:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
接著新建“作業“過程如下:

screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
再來看看“警報“的創建過程:
screen.width#333)this.width=screen.width#333" border="0" galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
(注意在建立警報的“響應”欄目里,對應著相應的作業和操作員)
談過了這些功能,是不是覺得真是很方便呀,當然了良好的運用不僅僅就這簡單
的幾步,這需要大家在應用中適時的總結以適應我們的需要。現在,我們再談論
一個SQLSERVER
的另一項不錯的功能—腳本。
所謂的利用腳本,就是可以將數據庫對象或服務器中的其他對象以腳本(Script)
方式存入文件,也就是存成SQL程序以供我們繼續利用。
同樣腳本也可以用于這里的自動化管理。例如:我們可以將操作員,作業和警報
等對象存成Script文件后,再拿到別的服務器上加以利用。這是不是在不同的服
務器上創建相同的操作員等重復的工作了。這就是腳本的效率所在。
如果需要存為腳本文件,可以在企業管理器中右擊相應的對象在“所有任務“/“生
成SQL腳本”命令,設置確定即可。
談了上面的自動化管理的方式是很實用的,但似乎是不是缺乏全面性,要為自己
的服務器構建一套完善的自動化維護機制,可能需要花費不少心力,但是將大部
分的日常維護工作適度的自動化,多少可以減輕管理上的負擔,為此
SQLSERVER還提供了一項可以將整套數據庫維護工作自動化的功能,這就是數
據庫的維護計劃。
我們可以在企業管理器中執行“工具“/數據庫維護計劃器,這樣就見到了如下界

面,依次設置即可。
這次的討論就說到這里,關于自動化管理,我不用說大家都明白,合理的設置會
給你的工作帶來什么樣的影響,好好體會,讓工作更加輕松!

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

SQLSERVER2000功略(3)-數據庫的登陸及其用戶權限

發表人:kendy517 | 發表時間: 2007年二月09日, 11:54

SQLSERVER2000功略(3)-數據庫的登陸及其用戶權限
SQLSERVER2000功略-數據庫的登陸及其用戶權限
說過了兩章純粹的理論,是不是有乏味的感覺,好,我們從這一講就進入實質的
管理階段。首先,我們討論的是SQLSERVER安全管理中的登陸和權限問題。
SQLSERVER的登陸是安全管理的第一關。這個決定了那些人可以使用
SQLSERVER(就像進屋時的房門鑰匙)。關于登陸控制,SQLSERVER則采用
了兩種不同的檢查方式:windows驗證和windows,sqlserver混合驗證。前者就
是我們登陸windows時的用戶帳號,而后者則是在保留前者的前提下也允許
SQLSERVER中建立的登陸帳號。這也是為用戶提供方便的選擇。
我們擁有了登陸的帳號,就可以進入SQLSERVER的控制中心,那我們可以做
些什么哪?這個肯定是有控制的進行的。SQLSERVER中的訪問權限分為兩方
面,分別是:服務器本身的操作權限和數據庫的訪問權限。我們分別加以簡介:
服務器的操作權限是從真個服務器來說的,是面向所有數據庫的定義。例如:是
否有權創建或者刪除登陸帳號,是否可以建立數據庫等等。這些也就是通過設置
服務器角色(server role)來實現的。SQLSERVER內建了七個服務器角色,分
別代表七種服務器工作的操作權。
數據庫的訪問權限就是針對某一個數據庫而言的。他可以分為兩層,第一層是限
制何人訪問數據庫,第二層限制可訪問數據庫中的那些表,視圖和存儲過程,以
及是否可以用select,insert,update等等。這個權限往往是通過數據庫角色得以實
現的。
(服務器角色不可以自定義,數據庫角色可以自定義)
僅僅知道上面這些概念是不行的,因為SQLSERVER中的權限是比較復雜的,
因為彼此之間可能存在某些權鏈。所以僅僅概念是不容易說清的,我們討論的就
是基礎的東西,懂得了這些在真正工作中才可以更好的掌握管理技能。我們簡單
的談談權鏈的問題吧!
由于每個對象都有他自己的擁有權信息,這個對象可能和其他對象存在一定的依
存關系,比如:一個視圖是從另外一個視圖建立過來的。這些相互依存的對象關
系可能拉的很長,因此相依存的對象的擁有權就形成一個由上而下的鏈結,這在
SQLSERVER中就稱作擁有權鏈(Ownership Chain)。正是由于這樣,可能所產
生的訪問權限變得非常復雜。所以,我們在這里提出以視圖和存儲過程來限制訪
問范圍。通過視圖確定用戶可以訪問的內容,然后把視圖的相關權限賦予具體的
用戶,這樣可以有效的減輕權限設置的工作量(特別是用戶訪問范圍跨度較大的
情況下)。除了視圖,我們也可以自定義存儲過程來對數據的訪問加以限制,即

把一組可查詢某特定數據的語句存成存儲過程,然后將其execute權限設置給用
戶,用戶就可以執行他來取得數據了。這樣省去了很多復雜的授權過程,是不是
很方便呀!
簡單的說了說這些,我們再來談談SQLSERVER中特殊的東西:sa帳號,public
數據庫角色,guest數據庫用戶。
Sa是SQLSERVER默認的管理員帳號,主要是為了向下兼容而設置的。這個也
就是安裝好SQLSERVER時就有的帳號,而且權限極大,所以在安裝過程中最
好把他的密碼進行設置,不要為空。這個帳號相當于服務器角色中的system
administrator,而且不可以刪除。
Public數據庫角色是一個公共的數據庫角色,也就是說當你新建一個數據庫角色
的時候,默認的就屬于這個角色。這個也是不可刪除的。所以為了安全期間,我
們對public數據庫對象不要賦予過多的權限(除非有這個需要)。
Guest是一個特殊的數據庫用戶,類似于windows NT/2000下的guest帳號,都
是給未經授權的用戶提供某種程度的訪問權限。如果不需要這個用戶可以將其刪
除。
說了這些概念,其實現都是通過“企業管理器”實現的,我們就這些談談用相應的
系統存儲過程:
登陸管理:sp_addlogin 新增帳號
sp_droplogin 刪除帳號
sp_grantlogins 允許某windows帳號訪問
sp_denylogins 禁止某windows帳號訪問
sp_revokelogins 刪除某windows帳號訪問
sp_helplogin 查看帳號信息
sp_addsrvrolemember 將某用戶添加到服務器角色
sp_dropsrvrolemember 將某用戶從數據庫角色中刪除
sp_helpsrvrole 查看服務器角色的信息
數據庫用戶管理:sp_grantaccess 建立數據庫用戶
sp_revokedbaccess 刪除數據庫用戶
sp_helpuser 查看用戶信息
數據庫角色管理:sp_addrole 建立數據庫角色
sp_addrolemember 將用戶加入數據庫角色
sp_helprole 查看數據庫角色信息
sp_helprolemember 查看某數據庫角色的所有成員
sp_droprole 刪除角色
sp_droprolemember 刪除角色中的某一成員
好了,看了上面的不要感覺麻煩呀,這可是讓你高效工作的寶貝呀,熟能生巧,
我們一起聯系多了,其實掌握就覺得很輕松了!繼續努力!:)

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

SQLSERVER2000攻略(1)-工作流程篇

發表人:kendy517 | 發表時間: 2007年二月09日, 11:51

SQLSERVER2000是windows平臺上一個重要的數據管理工具。了解數據庫的朋
友對他一定很熟悉。我們就此在這里作一系列的討論,希望通過這次的交流我們
對SQLSERVER2000有個深刻的理解。首先,我們探討一下他的工作流程,這
可是工作的基礎呀,好,我們開始了!
簡單的說,SQLSERVER2000是個采用主從結構的關系數據庫系統。哈,是不是
太簡單,畢竟現在市面上的數據庫產品幾乎都是這個結構。我們來深入一點,所
謂SQLSERVER的主從結構(Client/Server),就是由SQLSERVER扮演存放數據
和提供數據給客戶端的角色,當用戶要取用數據時,則可調用各種不同的客戶端
應用程序,通過SQLSERVER所支持的接口,向SQLSERVER提供請求,然后
取得數據庫中的數據并返回給用戶。這個過程應該好理解吧。

看了這個是不是覺得很easy呀!其實,這只是比較傳統的雙層式Client/Server
結構,近年來三層式或者多層式主從結構的應用正在流行。例如:配合微軟的
BackOffice中的其他服務器產品,即可建立多層主從運算模式。
了解了基本的數據流程,那是不是要問是什么實現客戶端與服務器之間的溝通
哪?這個是個比較有意義的問題。我們知道了作什么,就應改知道他是怎么做的。
所謂,打破沙鍋問到底!我們說一下工作原理:SQLSERVER提供了多種不同的
接口讓客戶端(應用程序)順利與服務器進行交流,在此接口的基礎上,由
NET#Library(網絡函數庫)建立兩邊IPC(Interprocess Commication)通訊管道來
進行工作。具體的說就是:當客戶端程序使用某種接口向服務器提出查詢請求時,
數據庫接口驅動程序調用客戶端的Net#library,而Net#library則調用IPC應用程序
接口產生IPC,通過IPC送達服務端,服務端接受請求后經SQLSERVER處理,
以同樣的方式將結果送回客戶端。(這個過程有兩個情況,Client和Server在同
一臺計算機上,Net#library會使用local IPC,如果是網絡存取,則會有雙方所使用
的網絡協議產生Remote IPC)圖示如下:
了解了外部工作機制,咱們看看服務端是怎么分工的,畢竟多數的數據工作是由
服務器完成的。整體上說,整個SQLSERVER的數據管理系統分為如下幾個組
件:
▲Open Data Service(ODS):負責處理由Net#library送來的查詢請求,ODS會調用
SQLSERVER的內部功能來完成客戶端的需求。
▲SQL Server Service:這個SQLSERVER的“心臟”負責管理我們的數據庫,以及
所有建立,查詢和修改的數據庫的操作。此數據庫管理系統的核心又分為幾個單
元,其中最主要的兩個單元就是負責解SQL語法和安排查詢執行計劃等工作的
關系引擎(Relational Engine),以及負責管理數據庫文件和文件讀寫等工作的存
儲引擎(Storage Engine)。這兩個組件之間則是通過OLE DB接口來通信的。
▲SQL SERVER Agent(SQL SERVER代言程序):可以說此組件是重要性僅次于
SQL SERVER Service的組件,這個服務提供了有關工作編排,以及服務器有問
題時通知管理員等相關功能的支持。
▲MS DTC Service:如果將SQL SERVER安裝在多臺服務器上,要讓客戶端能夠
在單個事務中對不同的服務器(數據源)進行處理,就須借助MS DTC(Microsoft
Distributed Transaction Coordinator)Service來負責這類分布式事務的協調工作,

以確保在各個數據庫上的更改操作能正確完成。
了解了上面的過程,是不是有點印象了,來我們理清一下思路,問一下自己:客
戶端的工作請求怎么傳遞給服務器的?服務器又是怎么處理相應的請求的?認
真想想這兩個問題,其實你會覺得原來“不過如此”!_

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

SQLSERVER中使用存儲過程(Stored Procedure)

發表人:kendy517 | 發表時間: 2007年二月09日, 11:50

隨著SQLSERVER不斷的學習,認識的深入,我們會發現越來越多的功能呈現
在我們面前,這些功能都是十分強大的,在我們應用中發揮著十分有意義的作用,
也因此感知作為一個大型的數據庫管理系統的魅力所在。從這一篇開始,我們著
手討論“存儲過程“,”觸發器“,”游標“,”事務“和”鎖“的應用,如果熟練的掌握
了這些,我想駕馭SQLSERVER的能力將是一個新的層次。學習是為了應用,
掌握就是為了解決問題。希望通過我們一起的學習,我們都可以很好的利用這個
工具為我們服務。這是我們學習的目的也是我們的奮斗目標。好,我們繼續吧!
說起存儲過程,我們先了解他的概念,這是我們討論必走的第一步:存儲過程就
是將所需要的工作,預先以SQL程序寫好,命名后進行保存,以后需要作這些
工作時可以使用EXECUTE指令來調用,即可自動完成相應任務。這里的存儲過
程也是自動化的一個方面,總之就是為了方便管理的一種措施。讓我來說說他的
優點吧:
1.執行效率高(這點不容置疑)
2.統一的操作流程:也就是通過存儲過程的操作避免了一些操作過程中可能無
意中認為的錯誤,只要確定了制作存儲過程時是正確地,以后在調用過程中就不
用擔心了。大家使用時流程是一樣的。
3.重復使用
4.安全性:這一點我們在數據庫的安全策略里討論過,可以參考前邊的文章。
也就是說:我們可以利用存儲過程作為數據存儲的管道。可以讓客戶在一定的范
圍內對數據進行操作。另外,存儲過程是可以加密的,這樣別人就看不到他的內
容了。
存儲過程分為三類:
系統存儲過程(System stored Procedure)sp_開頭,為SQLSERVER內置存儲過
程:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
擴展存儲過程(Extended stored Procedure),也就是外掛程序,用于擴展
SQLSERVER的功能,以sp_或者xp_開頭,以DLL的形式單獨存在。

screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
Δ(觀察上面的你會發現系統存儲過程和擴展存儲過程都是在master數據庫中。
sp_開頭的可是全局的,任何一個數據庫都可以直接調用的。)
用戶定義的存儲過程(User#defined stored Procedure),這個就是用戶在具體的
數據庫中自己定義的,名字最好不要以sp_和xp_開頭,防止混亂。
了解了基本概念,就到應用的階段了。
首先創建一個存儲過程(在pubs數據庫中),我們命名為MyProce示例代碼如下(功
能為向stores表中插入stor_id,stor_name兩個字段值):

create procedure MyProce
@param1 char(4), @param2 varchar(40)——定義參數,作為存儲過程的接口
with encryption——存儲過程加密
as insert stores (stor_id,stor_name) values(@param1,@param2)
go

我們如此調用:

exec MyProce .111111.,.Leijun.book.——參數賦值,調用存儲過程

用企業管理器創建如圖所示:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
如果我們要修改,可以查看相應的存儲過程的“屬性“,如上圖在”文本“窗體中修
改。
但是注意我們這個因為用了with encryption語句,所以,打開時將有下面的提示,
不允許查看,這也就是加密。
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
看了上面的是不是有所了解了,其實創建時還有其他的參數可以使用,我們這里
只是一個簡單的例子,更多的應用需要我們在實踐中不斷的總結,這樣才能更加

靈活的應用。 下面我們再來看一個創建的例子(這個的作用是在authors表中查
找一個人名,表中把一個名字分為兩字段存儲了,如果查到了,打印“查有此人
ID:”及其au_id字段值):

CREATE procedure SearchMe
@param1 varchar(10),@param2 varchar(30)
as
select @param2=au_id
from authors
where au_fname+au_lname=@param1
if @@rowcount>0——全局變量,記錄影響到的行
print'查有此人ID:'+@param2
GO

我們這樣執行:Exec SearchMe .leijun.,null
由于查找到了所以顯示如下:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
例子就簡單列舉這些,因為他的靈活性很大,所以我們只簡單的說明一下,如果
要更好的利用,這就需要我們不斷的摸索了。
下面我們談談使用過程中我了解到的注意事項:
1.在存儲過程中,有些建立對象的語句是不可使用的:create default,create
trigger,create procedure,create view,create rule.
2.在同一數據庫中,不同的所有者可以建立相同名稱的對象名。例如:
a.sample,b.sample,c.sample三個數據表可以同時存在。如果存儲過程中未指明對
象的所有者(例如存儲過程中的語句select * from sample,這句中的sample沒有
指明所有者),在執行的過程中默認的所有者查找順序是:相應的存儲過程的建
立者->相應數據庫的所有者。如果這個查找過程中沒有把所有者確定下來,系
統就要報錯。
(這里我額外插一句:如果需要嚴密的數據操作,在任何操作中盡量加上所有者,
例如leijun.sample)
3.在存儲過程名稱前邊添加#或者##,所建立的存儲過程則是“臨時存儲過程
“(#是局部臨時存儲過程,##是全局臨時存儲過程)。
上面的都是一些容易忽略的,特別是第二條,我們一定的認真思考,也許這些有
意無意的忽略是我們造成錯誤的根源!!
轉載自:leijun

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

[Php+APACHE+MySQL][或在windows已裝IIS下的]配置

發表人:kendy517 | 發表時間: 2007年二月09日, 09:30

前段時間的文章:
http://www.blueidea.com/bbs/NewsDetail.asp?id=2372560
可以一看,但是其對本篇價值是 1%.希望本篇能補充之缺陷.
一: 下載安裝程序
Apache可以從http://httpd.apache.org/download.cgi下載
PHP可以從http://www.php.net下載.
mysql在www.mysql.com/下載.
二 安裝程序(以下以2k為例說明,其他windows系統的類似)
首先如果您安裝了IIS的話,Internet 服務管理器##->默認web站點#->右擊##->停
止.
1: 先是Apache,有4.2M左右,沒啥說的,點擊安裝到D盤,為了方西系統重裝,D盤
方便.一路會很容易的安裝的成功.
2: php 5.1.X的安裝版是 2.44m 左右,可以點擊安裝,選擇服務器的時候選擇
apache,不過,沒有組建擴展,還有下載擴展的dll文件包(有的 19 m左右,不一定),
復制到C:WINNT目錄下面的.可以直接復制到d盤文件下面也可以,筆者不知道
為什么選擇了第一種.
3: MySQL我下載的是 4.1.7版本, 36.7M左右,也是一路點擊,然后啟動之.
三: 必要設置
如果我們要使用CGI二進制文件,那么我們要將如下指令插入到 Apache 的
httpd.conf 配置文件中,以設置 CGI 二進制文件:
PHP 以 CGI 方式安裝到 Apache:
ScriptAlias /php/ "D:/php/"
AddType application/x#httpd#php .php
Action application/x#httpd#php "/php/php.exe"
如果我們想把 PHP 作為 Apache 2.0 的模塊,那么就一定要移動 php4ts.dll 到
winnt/system32(Windows NT/2000)或 windows/system32(Windows XP),覆
蓋原有文件(如果有的話),對于 PHP 5,這個文件是 php5ts.dll。然后我們要

插入如下兩行到 httpd.conf 中,以使我們的 PHP 作為 Apache 的 PHP#Module
安裝:
PHP 以模塊方式安裝到 Apache:

; For PHP 5 do something like this:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x#httpd#php .php

添加這 2 行代碼到 httpd.conf ,httpd.conf 文件可通過計算機搜索找出.哈哈....
再在里面找出:

DocumentRoot "D:/web/web/php"

相關行,可以修改成自己的php網站根目錄.
如果你把那些擴展都復制到 C:winnt下面的話.
測試:<html>
<body>
<? phpinfo(); ?>
</body>
<html>
應該:正常可以看到的.
關于連接MySQL的,請看:
http://www.blueidea.com/bbs/NewsDetail.asp?id=2408054
為了您的IIS能繼續工作,請 在internet信息服務——-> 默認web站點#->右擊屬
性##-> IP地址:192.168.1.105 , 端口: 81 ,否則會提示端口以已使用之類的信息.
完畢,有問題請馬上提出,早安.

天氣:大雨,ccdot發表于2006#1#21 2:48:43,閱讀了460次,共有個1回復.

花了大半天的時間,終于把全新的php平臺建了起來,歷經了太多錯誤和反復,
看了網上無數篇教材,可仍錯漏百出,唉,真不知道那些寫教程的人在寫什么。
不過蒼天不負有心人,摸索了好久,最終還是成功了.:) ..寫下來,以后也有個
參照。

調試環境如下:
OS:win2000 sp4
apache_2052#win32 (msi格式)
php#5.0.2#Win32 (zip包)
mysql#5.0.1#alpha#snapshot#win (zip包)
所有程序(apache,php,mysql)安裝在F:/server目錄下。
●解壓php到f:/serverphp文件夾中。
PHP.ini的一些配置
.doc_root = F:/phpf //默認php文檔位置,設為apache中一樣,偶沒設,卻也行!!
.extension_dir = F:/server/php/ext //擴展文件位置,用作支持mysql,一定要設正確
.session.save_path = c:/temp //session存儲位置
.cgi.force_redirect=0 //如果出現Security Alert! The PHP CGI cannot be accessed
directly的警告,設置此值
.register_global,把它設置為on. //避免post變量不能傳遞
.display_errors = on //顯示錯誤消息
●裝好apache到f:/server/apache2,首先讓Apache2能 支持php5
1、打開apache的配置文件,添加如下兩行(php安裝在F:/server/php下)
.AddType application/x#httpd#php .php
.LoadModule php5_module F:/server/php/php5apache2.dll
這樣就已經可以支持了php了,不知網上的教程里為什么還要把那些dll文件
復制得滿天飛(版本是相同的),郁悶。
2、httpd.conf的一些其他必要設置:
.索引頁名稱 DirectoryIndex index.php
.默認文檔位置,設置 DocumentRoot路徑
3、網上流傳的配置,我沒有copy,但也成功了。
.把php5ts.dll復制到winnt目錄或system目錄中
●安裝mysql到f:/servermysql中。運行bin目錄中winmysqladmin.exe。設置你的
用戶名和密碼,端口不必更改。
●接著讓PHP支持Mysql數據庫
.將安裝目錄中的php.ini#recommended復制到winnt目錄中,改名為php.ini
查找 [MySQL] 字段內的內容.修改如下.

mysql.default_port = 3306
// 這里是MYSQL的端口.
mysql.default_host = localhost
// 這里是本地主機.
mysql.default_user = root
// 這里是用戶
mysql.default_password = abcdefg
// 這里是密碼
修改到這里就可以讓 Php 與 MYSQL 關聯了.
最后啟動 PHP 對 MYSQL 模塊支持.
查找 extension=php_mysql.dll 字串.刪除掉前面的 ; 號
extension=php_mysql.dll
請注意.如果不啟動 PHP 對 MYSQL 模塊支持.將無法使 PHPMYADMIN 正
常工作.將提示:
cannot load MySQL extension, please check PHP Configuration
無法裝入 MySQL 擴展,請檢查 PHP 的配置。
可是我設置完這樣,重啟apache卻出現找不到libmySQL.dll動態鏈接庫的提示,
幾經折磨才發現,必須把php中的libmysql.dll復制到apache中的bin目錄中才
ok(網上教材可沒有)。
●讓apache也支持mysql
把php目錄下的libmySQL.dll復制到apache的bin目錄下。
ok,調試phpinfo(),一切正常。可是我寫了句 echo "我愛你";,就出現了中文亂
碼。老問題,從網上搜得一段話,順利解決了問題。
●原因很簡單,由于Apache它默認的編碼是西歐編碼,你只要在“httpd.conf”中
找到“AddDefaultCharset ISO#8859#1”將它修改為“AddDefaultCharset GB2312 ”,
保存然后重新啟動Apache再試,可能有的朋友的已經解決了,但還是有很多的
朋友的網站依然是亂碼,包括我的,這是什么原因呢,網上也有介紹把它改為
“AddDefaultCharset off ”,可能在你的網站也不一定行得通,實質問題在于它是
由網頁制作軟件引起的,如果你使用的是Macromedia公司的Dreamweaver系列
軟件制作的,由于它的編碼為“gb2312”,所以就會出現亂碼,因此你只要在你網
頁的代碼中找到“”,把“gb2312”改為“GB2312”然后保存網頁,再試試看,行了吧!

是不是太簡單了,但是我為了把這亂碼問題解決,也足足花了二天的時間才找到
真正的原因,如果你做好了,別忘記請我喝酒呀!

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

MSSQL經典語句

發表人:kendy517 | 發表時間: 2007年二月09日, 09:24

1.按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate
Chinese_PRC_Stroke_ci_as

2.數據庫加密:select encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密后密碼') = 1##相同;否則不相同 encrypt('原始
密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密后密碼') = 1##相同;否則不相同

3.取回表中字段:declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and
a.name='表A'
set @sql='select '+right(@list,len(@list)#1)+' from 表A'
exec (@sql)

4.查看硬盤分區:EXEC master..xp_fixeddrives

5.比較A,B表是否相等:if (select checksum_agg(binary_checksum(*)) from A)

(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'

6.殺掉所有的事件探察器進程:DECLARE hcforeach CURSOR GLOBAL FOR
SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'

7.記錄搜索:開頭到N條記錄
Select Top N * From 表
###############################

N到M條記錄(要有主索引ID)Select Top M#N * From 表 Where ID in (Select Top
M ID From 表) Order by ID Desc
##################################
N到結尾記錄
Select Top N * From 表 Order by ID Desc

8.如何修改數據庫的名稱:sp_renamedb 'old_name', 'new_name'

9:獲取當前數據庫中的所有用戶表select Name from sysobjects where xtype='u'
and status>=0

10:獲取某一個表的所有字段select name from syscolumns where id=object_id('表
名')

11:查看與某一個表相關的視圖、存儲過程、函數select a.* from sysobjects a,
syscomments b where a.id = b.id and b.text like '%表名%'

12:查看當前數據庫中所有存儲過程select name as 存儲過程名稱 from
sysobjects where xtype='P'

13:查詢用戶創建的所有數據庫select * from master..sysdatabases D where sid not
in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

14:查詢某一個表的字段和數據類型select column_name,data_type from
information_schema.columns
where table_name = '表名'

[n].[標題]:Select * From TableName Order By CustomerName

[n].[標題]:Select * From TableName Order By CustomerName

from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

觸發器#MSSQL常用操作

發表人:kendy517 | 發表時間: 2007年二月09日, 09:18

不再新開文章.
這里只打算講解四部分了,也就最簡單、最常用的四部分。

1、觸發器。
定義: 何為觸發器?在SQL Server里面也就是對某一個表的一定的操作,觸發
某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用于Insert , Update , Delete 事件。(SQL Server 2000
定義了新的觸發器,這里不提)
我為什么要使用觸發器?比如,這么兩個表:
Create Table Student(——學生表
StudentID int primary key,——學號
....
)
Create Table BorrowRecord(——學生借書記錄表
BorrowRecord int identity(1,1),——流水號
StudentID int ,——學號
BorrowDate datetime,——借出時間
ReturnDAte Datetime,——歸還時間
...
)
用到的功能有:
1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同
時更改借書記錄表的學號);
2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。
等等。
這時候可以用到觸發器。對于1,創建一個Update觸發器:
Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID
end

理解觸發器里面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted
分別表示觸發事件的表“舊的一條記錄”和“新的一條記錄”。
一個Update 的過程可以看作為:生成新的記錄到Inserted表,復制舊的記錄到
Deleted表,然后刪除Student記錄并寫入新紀錄。
對于2,創建一個Delete觸發器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。
這里我們只講解最簡單的觸發器。復雜的容后說明。
事實上,我不鼓勵使用觸發器。觸發器的初始設計思想,已經被“級聯”所替代.
來自:http://www.innerv.com/blogview.asp?logID=512

分類: ( 一般分類 ) :: 評論 (0) :: 靜態鏈接網址 :: 引用 (0)

<!##——>

MSSQL數據庫導出和導入

發表人:kendy517 | 發表時間: 2007年二月09日, 09:17

SQL Server導出導入數據方法

2004#02 余楓 一、導出導入SQL Server里某個數據庫 1.在SQL Server企業管理
器里選中要轉移的數據庫,按鼠標右鍵,選所有任務->備份數據庫。 2.備份 選
數據庫#完全, 目的 備份到 按添加按鈕 文件名 在SQL Server服務器硬盤下輸
入一個自定義的備份數據庫文件名(后綴一般是bak) 重寫 選重寫現有媒體 最
后按確定按鈕。 如果生成的備份數據庫文件大于1M,要用壓縮工具壓縮后再
到Internet上傳輸。 3.通過FTP或者remote desktop或者pcanywhere等方法 把
第二步生成的備份數據庫文件或者其壓縮后的文件傳到目的SQL Server數據庫,
如果有壓縮要解壓。 4.目的SQL Server數據庫如果還沒有此數據庫,先創建一
個新的數據庫; 然后選中這個新創建的數據庫,按鼠標右鍵,選所有任務->還
原數據庫 還原->從設備->選擇設備->磁盤->添加(找到要導入的備份數據庫文件
名)->確定 還原備份集->數據庫#完全 最后按確定按鈕。完全的數據庫導入成
功了。 (如果在已經存在的SQL Server數據庫上還原數據庫可能遇到有還有其它
人正在使用它而恢復操做失敗, 可以去看 ->管理->當前活動->鎖/對象->找到數
據庫下鎖的進程號->到查詢分析器里用kill 進程號殺掉這些鎖, 然后再做還原)
注意:如果在原有的目的SQL Server數據庫上從備份文件(*.bak)還原數據庫 會

把已經存在的表、存儲過程等數據庫對象全部替換成最近這次導入的備份數據庫
里的內容。 如果一定要還原備份文件(.bak)里部分數據,需要另外建一個新數據
庫, 其邏輯名稱和數量同備份文件(
.bak)里數據庫的邏輯名稱和數量一致; 新
數據庫的物理文件名稱取得一定要和備份文件(*.bak)里數據庫的物理文件不一
樣才行。 二、導出導入SQL Server里某個表 1.沒有防火墻,同一個局域網里或
不在同一個局域網里,但通過Internet可以互相訪問 在SQL Server企業管理器里
選中目的數據庫 ,按鼠標右鍵,選所有任務->導入數據-> 彈出數據轉換服務導
入/導出向導窗口->下一步-> 選數據源-> 數據源(用于SQL Server的Microfost
OLE DB提供程序)-> 服務器(可選擇局域網內能訪問到的所有SQL Server服務
器,或者直接輸入IP地址)-> 選擇使用windows身份驗證還是使用SQL Serve身
份驗證(輸入數據庫的用戶名和密碼)-> 數據庫(可選擇上面選中SQL Server服務
器上所有權限范圍內的數據庫)->下一步-> 選擇目的->目的(用于SQL Server的
Microfost OLE DB提供程序)-> 服務器(默認為上一步里選中的導出服務器,也
可以選其它局域網內能訪問到的所有SQL Server服務器,或者直接輸入IP地
址)-> 目的數據庫(可選擇上面選中SQL Server服務器上所有權限范圍內的數據
庫)->下一步-> 制定表復制或查詢->選從源數據庫復制表和視圖(也可

———————————————————————————————————————

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容