語 句 功 能
數(shù)據(jù)操作
SELECT——從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT——向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE——從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE——更新數(shù)據(jù)庫表中的數(shù)據(jù)
數(shù)據(jù)定義
CREATE TABLE——?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫表
DROP TABLE——從數(shù)據(jù)庫中刪除表
ALTER TABLE——修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE VIEW——?jiǎng)?chuàng)建一個(gè)視圖
DROP VIEW——從數(shù)據(jù)庫中刪除視圖
CREATE INDEX——為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引
DROP INDEX——從數(shù)據(jù)庫中刪除索引
CREATE PROCEDURE——?jiǎng)?chuàng)建一個(gè)存儲(chǔ)過程
DROP PROCEDURE——從數(shù)據(jù)庫中刪除存儲(chǔ)過程
CREATE TRIGGER——?jiǎng)?chuàng)建一個(gè)觸發(fā)器
DROP TRIGGER——從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE SCHEMA——向數(shù)據(jù)庫添加一個(gè)新模式
DROP SCHEMA——從數(shù)據(jù)庫中刪除一個(gè)模式
CREATE DOMAIN——?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)值域
ALTER DOMAIN——改變域定義
DROP DOMAIN——從數(shù)據(jù)庫中刪除一個(gè)域
數(shù)據(jù)控制
GRANT——授予用戶訪問權(quán)限
DENY——拒絕用戶訪問
REVOKE——解除用戶訪問權(quán)限
事務(wù)控制
COMMIT——結(jié)束當(dāng)前事務(wù)
ROLLBACK——中止當(dāng)前事務(wù)
SET TRANSACTION——定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
程序化SQL
DECLARE——為查詢設(shè)定游標(biāo)
EXPLAN——為查詢描述數(shù)據(jù)訪問計(jì)劃
OPEN——檢索查詢結(jié)果打開一個(gè)游標(biāo)
FETCH——檢索一行查詢結(jié)果
CLOSE——關(guān)閉游標(biāo)
PREPARE——為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL 語句
EXECUTE——?jiǎng)討B(tài)地執(zhí)行SQL 語句
DESCRIBE——描述準(zhǔn)備好的查詢
局部變量
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_wage1.07
when job_level = .3. then e_wage1.06
else e_wage1.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 小時(shí)2 分零3 秒后才執(zhí)行SELECT 語句
waitfor delay .01:02:03.
select * from employee
例 等到晚上11 點(diǎn)零8 分后才執(zhí)行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關(guān)鍵字的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列號(hào)
stockname = (select stockname from stock_information where stockid = 4)
######### 子查詢
######### 除非能確保內(nèi)層select只返回一個(gè)行的值,
######### 否則應(yīng)在外層where子句中用一個(gè)in限定符
select distinct column_name form table_name——####### distinct指定檢索獨(dú)有的列值,
不重復(fù)
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合并查詢結(jié)果集惨驶,all#保留重復(fù)行
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——# 修改數(shù)據(jù)庫表結(jié)構(gòu)
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 .........——### 實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)
alter table table_name drop constraint Stockname_default——## 刪除Stockname的
default約束
function(/常用函數(shù)/)**
統(tǒng)計(jì)函數(shù)####
AVG——求平均值
COUNT——統(tǒng)計(jì)數(shù)目
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()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差
STDEVP()
STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差
VAR()
VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計(jì)變異數(shù)
VARP()
VARP()函數(shù)返回總體變異數(shù)
算術(shù)函數(shù)####
/三角函數(shù)/
SIN(float_expression)——返回以弧度表示的角的正弦
COS(float_expression)——返回以弧度表示的角的余弦
TAN(float_expression)——返回以弧度表示的角的正切
COT(float_expression)——返回以弧度表示的角的余切
/反三角函數(shù)/
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)
把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為
INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression)——把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類
型可為
INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression)——返回表達(dá)式的指數(shù)值
LOG(float_expression)——返回表達(dá)式的自然對數(shù)值
LOG10(float_expression)##返回表達(dá)式的以10 為底的對數(shù)值
SQRT(float_expression)——返回表達(dá)式的平方根
/取近似值函數(shù)/
CEILING(numeric_expression)——返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表
達(dá)式相同可為
INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression)——返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)
式相同可為
INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression)——返回以integer_expression 為精度的四舍五入值返
回的數(shù)據(jù)
類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression)——返回表達(dá)式的絕對值返回的數(shù)據(jù)類型與表達(dá)式相同可
為
INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression)——測試參數(shù)的正負(fù)號(hào)返回0 零值1 正數(shù)或#1 負(fù)數(shù)返回
的數(shù)據(jù)類型
與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI()——返回值為π 即3.1415926535897936
RAND([integer_expression])——用任選的[integer_expression]做種子值得出0#1 間
的隨機(jī)浮點(diǎn)數(shù)
字符串函數(shù)####
ASCII()——函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值
CHAR()——函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符
如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會(huì)返回一個(gè)NULL 值
LOWER()——函數(shù)把字符串全部轉(zhuǎn)換為小寫
UPPER()——函數(shù)把字符串全部轉(zhuǎn)換為大寫
STR()——函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)
LTRIM()——函數(shù)把字符串頭部的空格去掉
RTRIM()——函數(shù)把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()——函數(shù)返回部分字符串
CHARINDEX(),PATINDEX()——函數(shù)返回字符串中某個(gè)指定的子串出現(xiàn)的開始位
置
SOUNDEX()——函數(shù)返回一個(gè)四位字符碼
SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對數(shù)字和漢字
均只返回0 值
DIFFERENCE()——函數(shù)返回由SOUNDEX 函數(shù)返回的兩個(gè)字符表達(dá)式的值的差
異
0 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符不同
1 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符相同
2 兩個(gè)SOUNDEX 函數(shù)返回值的第一二個(gè)字符相同
3 兩個(gè)SOUNDEX 函數(shù)返回值的第一二三個(gè)字符相同
4 兩個(gè)SOUNDEX 函數(shù)返回值完全相同
QUOTENAME()——函數(shù)返回被特定字符括起來的字符串
/select quotename('abc', '{') quotename('abc')
運(yùn)行結(jié)果如下
##################################{
{abc} [abc]/
REPLICATE()——函數(shù)返回一個(gè)重復(fù)character_expression 指定次數(shù)的字符串
/select replicate('abc', 3) replicate( 'abc', #2)
運(yùn)行結(jié)果如下
###########——#########
abcabcabc NULL/
REVERSE()——函數(shù)將指定的字符串的字符排列順序顛倒
REPLACE()——函數(shù)返回被替換了指定子串的字符串
/select replace('abc123g', '123', 'def')
運(yùn)行結(jié)果如下
###########——#########
abcdefg/
SPACE()——函數(shù)返回一個(gè)有指定長度的空白字符串
STUFF()——函數(shù)用另一子串替換字符串指定位置長度的子串
數(shù)據(jù)類型轉(zhuǎn)換函數(shù)####
CAST() 函數(shù)語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數(shù)語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運(yùn)行結(jié)果如下
##############################——##########
199 Jan 15 2000
日期函數(shù)####
DAY()——函數(shù)返回date_expression 中的日期值
MONTH()——函數(shù)返回date_expression 中的月份值
YEAR()——函數(shù)返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
函數(shù)返回指定日期date 加上指定的額外日期間隔number 產(chǎn)生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
函數(shù)返回兩個(gè)指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>)——函數(shù)以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>)——函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE()——函數(shù)以DATETIME 的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間
系統(tǒng)函數(shù)####
APP_NAME()——函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE()——函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL 表達(dá)式的值
COL_LENGTH(<'table_name'>, <'column_name'>)——函數(shù)返回表中指定字段的長
度值
COL_NAME(<table_id>, <column_id>)——函數(shù)返回表中指定字段的名稱即列名
DATALENGTH()——函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度
DB_ID(['database_name'])——函數(shù)返回?cái)?shù)據(jù)庫的編號(hào)
DB_NAME(database_id)——函數(shù)返回?cái)?shù)據(jù)庫的名稱
HOST_ID()——函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
HOST_NAME()——函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
IDENTITY() 函數(shù)只在SELECT INTO 語句中使用用于插入一個(gè)identity
column列到新表中
/select identity(int, 1, 1) as column_name
into newtable
from oldtable/
ISDATE()——函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL(<check_expression>, <replacement_value>)——函數(shù)將表達(dá)式中的NULL
值用指定值替換
ISNUMERIC()——函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID()——函數(shù)返回一個(gè)UNIQUEIDENTIFIER 類型的數(shù)值
NULLIF(<expression1>, <expression2>)
NULLIF 函數(shù)在expression1 與expression2 相等時(shí)返回NULL 值若不相等時(shí)
則返回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編程
在進(jìn)行數(shù)據(jù)庫操作時(shí)蹬癌,無非就是添加、刪除镀梭、修改刀森,這得設(shè)計(jì)到一些常用的SQL
語句,如下:
SQL常用命令使用方法:
(1) 數(shù)據(jù)記錄篩選:
sql="select * from 數(shù)據(jù)表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 like %字段值% order by 字段名
[desc]"
sql="select top 10 * from 數(shù)據(jù)表 where 字段名 order by 字段名 [desc]"
sql="select * from 數(shù)據(jù)表 where 字段名 in (值1,值2,值3)"
sql="select * from 數(shù)據(jù)表 where 字段名 between 值1 and 值2"
(2) 更新數(shù)據(jù)記錄:
sql="update 數(shù)據(jù)表 set 字段名=字段值 where 條件表達(dá)式"
sql="update 數(shù)據(jù)表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表
達(dá)式"
(3) 刪除數(shù)據(jù)記錄:
sql="delete from 數(shù)據(jù)表 where 條件表達(dá)式"
sql="delete from 數(shù)據(jù)表" (將數(shù)據(jù)表所有記錄刪除)
(4) 添加數(shù)據(jù)記錄:
sql="insert into 數(shù)據(jù)表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 目標(biāo)數(shù)據(jù)表 select * from 源數(shù)據(jù)表" (把源數(shù)據(jù)表的記錄添加到
目標(biāo)數(shù)據(jù)表)
(5) 數(shù)據(jù)記錄統(tǒng)計(jì)函數(shù):
AVG(字段名) 得出一個(gè)表格欄平均值
COUNT(|字段名) 對數(shù)據(jù)行數(shù)的統(tǒng)計(jì)或?qū)δ骋粰谟兄档臄?shù)據(jù)行數(shù)統(tǒng)計(jì)
MAX(字段名) 取得一個(gè)表格欄最大的值
MIN(字段名) 取得一個(gè)表格欄最小的值
SUM(字段名) 把數(shù)據(jù)欄的值相加
引用以上函數(shù)的方法:
sql="select sum(字段名) as 別名 from 數(shù)據(jù)表 where 條件表達(dá)式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統(tǒng)的計(jì)值报账,其它函數(shù)運(yùn)用同上研底。
(5) 數(shù)據(jù)表的建立和刪除:
CREATE TABLE 數(shù)據(jù)表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數(shù)據(jù)表名稱 (永久性刪除一個(gè)數(shù)據(jù)表)
在ASP編程時(shí)埠偿,下面這些語句是必須知道的:
1.連接數(shù)據(jù)庫
a. ASP與Access數(shù)據(jù)庫連接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile=server.mappath("數(shù)據(jù)庫名稱.mdb")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (.mdb)};uid=admin;pwd=數(shù)據(jù)庫密
碼;dbq="&mdbfile
%>
b. ASP與SQL數(shù)據(jù)庫連接:
<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服務(wù)器名稱或IP地
址;UID=sa;PWD=數(shù)據(jù)庫密碼;DATABASE=數(shù)據(jù)庫名稱
%>
建立記錄集對象:
set rs=server.createobject("adodb.recordset")
rs.open SQL語句,conn,3,2
- 記錄集對象的方法:
rs.movenext 將記錄指針從當(dāng)前的位置向下移一行
rs.moveprevious 將記錄指針從當(dāng)前的位置向上移一行
rs.movefirst 將記錄指針移到數(shù)據(jù)表第一行
rs.movelast 將記錄指針移到數(shù)據(jù)表最后一行
rs.absoluteposition=N 將記錄指針移到數(shù)據(jù)表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設(shè)置每頁為N條記錄
rs.pagecount 根據(jù) pagesize 的設(shè)置返回總頁數(shù)
rs.recordcount 返回記錄總數(shù)
rs.bof 返回記錄指針是否超出數(shù)據(jù)表首端,true表示是飘哨,false為否
rs.eof 返回記錄指針是否超出數(shù)據(jù)表末端胚想,true表示是,false為否
rs.delete 刪除當(dāng)前記錄芽隆,但記錄指針不會(huì)向下移動(dòng)
rs.addnew 添加記錄到數(shù)據(jù)表末端
rs.update 更新數(shù)據(jù)表記錄
附:
常數(shù) 常數(shù)值 說明
--------------------------------
adLockReadOnly 1 缺省值浊服,Recordset對象以只讀方式啟動(dòng),無法運(yùn)行AddNew胚吁、
Update及Delete等方法
adLockPrssimistic 2 當(dāng)數(shù)據(jù)源正在更新時(shí)牙躺,系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以
保持?jǐn)?shù)據(jù)一致性腕扶。
adLockOptimistic 3 當(dāng)數(shù)據(jù)源正在更新時(shí)孽拷,系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其
他用戶可以對數(shù)據(jù)進(jìn)行增半抱、刪脓恕、改的操作。
adLockBatchOptimistic 4 當(dāng)數(shù)據(jù)源正在更新時(shí)窿侈,其他用戶必須將CursorLocation
屬性改為adUdeClientBatch才能對數(shù)據(jù)進(jìn)行增炼幔、刪、改的操作史简。
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
SQLSERVER2000功略(4)###自動(dòng)化管理
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 11:56
面對大量反復(fù)的工作乃秀,即使一個(gè)優(yōu)秀的管理員也會(huì)感到很大的負(fù)擔(dān)。但為了保持
服務(wù)器維持在最佳運(yùn)行狀態(tài)圆兵,這些又時(shí)不得不作的工作跺讯。這時(shí),SQLSERVER想
你所想殉农,提供了自動(dòng)化的管理措施刀脏。在我們工作之前,我們需要了解自動(dòng)化背后
的好助手—SQLSERVER Agent,這個(gè)就是SQLSERVER的代理程序超凳,他是運(yùn)行在
后臺(tái)的服務(wù)火本,可謂是幕后英雄!那他有什么功能呢聪建,如下:
① 作業(yè)調(diào)度。
② 執(zhí)行作業(yè)茫陆。
③ 產(chǎn)生報(bào)警金麸。
④ 在指定的事件發(fā)生時(shí),通知指定的管理員或操作員簿盅。
說到這里挥下,我們就談?wù)勛詣?dòng)化中的角色:操作員揍魂,作業(yè),警報(bào)棚瘟。
操作員:所謂的操作員只是人名與其通信方式(可有電子郵件地址现斋,呼叫器或
NET SEND的目的地三種)的設(shè)置而已。只要將服務(wù)器管理人員的聯(lián)絡(luò)方式都以
操作員設(shè)置妥當(dāng)時(shí)偎蘸,當(dāng)SQLSERVER遇到各種需要處理的狀況庄蹋,SQLSERVER
Agent就會(huì)通過指定的方式通知管理人員前來完成,以達(dá)到及時(shí)的排除各種問題迷雪。
作業(yè):作業(yè)是SQLSERVER Agent諸多功能中最常用的限书。所謂作業(yè)就是可讓
SQLSERVERAgent自動(dòng)執(zhí)行的一組操作,它既可以自動(dòng)執(zhí)行(這個(gè)就涉及到調(diào)
度)章咧,也可以手動(dòng)執(zhí)行倦西。在定義作業(yè)必須注意以下內(nèi)容:作業(yè)的名稱,作業(yè)的種
類赁严,作業(yè)的所有者扰柠,作業(yè)的說明文字卤档。
警報(bào):就是指針對特殊的事件忆谓,要發(fā)信給操作員的設(shè)置。在作業(yè)的設(shè)置中的“通
知“頁面中指定了要將作業(yè)執(zhí)行狀態(tài)通知操作員時(shí)倡缠,其實(shí)就是在設(shè)置警報(bào)(如下
圖)
screen.width#333)this.width=screen.width#333" border="0" galleryimg="no" />
在定義警報(bào)時(shí)哨免,可有兩種設(shè)置事件的方式,一種是指明了針對某特定事件昙沦,也就
是只要在服務(wù)器發(fā)生該事件琢唾。另一種是指定事件的嚴(yán)重度(Serverity),只要是達(dá)
到指定嚴(yán)重程度的所有事件,SQLSERVER Agent就會(huì)發(fā)信通知操作員盾饮。
了解了概念采桃,就是動(dòng)手的時(shí)候了,這些我們就以圖片給與說明丘损,第一個(gè)我們新建
“操作員“普办,過程如下:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
接著新建“作業(yè)“過程如下:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
再來看看“警報(bào)“的創(chuàng)建過程:
screen.width#333)this.width=screen.width#333" border="0" galleryimg="no" />
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
(注意在建立警報(bào)的“響應(yīng)”欄目里,對應(yīng)著相應(yīng)的作業(yè)和操作員)
談過了這些功能徘钥,是不是覺得真是很方便呀衔蹲,當(dāng)然了良好的運(yùn)用不僅僅就這簡單
的幾步,這需要大家在應(yīng)用中適時(shí)的總結(jié)以適應(yīng)我們的需要〕蚀。現(xiàn)在舆驶,我們再談?wù)?br>
一個(gè)SQLSERVER
的另一項(xiàng)不錯(cuò)的功能—腳本橱健。
所謂的利用腳本,就是可以將數(shù)據(jù)庫對象或服務(wù)器中的其他對象以腳本(Script)
方式存入文件沙廉,也就是存成SQL程序以供我們繼續(xù)利用。
同樣腳本也可以用于這里的自動(dòng)化管理珊皿。例如:我們可以將操作員,作業(yè)和警報(bào)
等對象存成Script文件后垢夹,再拿到別的服務(wù)器上加以利用果元。這是不是在不同的服
務(wù)器上創(chuàng)建相同的操作員等重復(fù)的工作了而晒。這就是腳本的效率所在迅耘。
如果需要存為腳本文件颤专,可以在企業(yè)管理器中右擊相應(yīng)的對象在“所有任務(wù)“/“生
成SQL腳本”命令栖秕,設(shè)置確定即可。
談了上面的自動(dòng)化管理的方式是很實(shí)用的俏拱,但似乎是不是缺乏全面性梯投,要為自己
的服務(wù)器構(gòu)建一套完善的自動(dòng)化維護(hù)機(jī)制,可能需要花費(fèi)不少心力尔许,但是將大部
分的日常維護(hù)工作適度的自動(dòng)化蒸甜,多少可以減輕管理上的負(fù)擔(dān)柠新,為此
SQLSERVER還提供了一項(xiàng)可以將整套數(shù)據(jù)庫維護(hù)工作自動(dòng)化的功能恨憎,這就是數(shù)
據(jù)庫的維護(hù)計(jì)劃。
我們可以在企業(yè)管理器中執(zhí)行“工具“/數(shù)據(jù)庫維護(hù)計(jì)劃器钥组,這樣就見到了如下界
面程梦,依次設(shè)置即可屿附。
這次的討論就說到這里拿撩,關(guān)于自動(dòng)化管理,我不用說大家都明白探赫,合理的設(shè)置會(huì)
給你的工作帶來什么樣的影響伦吠,好好體會(huì)搁嗓,讓工作更加輕松腺逛!
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
SQLSERVER2000功略(3)-數(shù)據(jù)庫的登陸及其用戶權(quán)限
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 11:54
SQLSERVER2000功略(3)-數(shù)據(jù)庫的登陸及其用戶權(quán)限
SQLSERVER2000功略-數(shù)據(jù)庫的登陸及其用戶權(quán)限
說過了兩章純粹的理論,是不是有乏味的感覺够委,好茁帽,我們從這一講就進(jìn)入實(shí)質(zhì)的
管理階段脐雪。首先战秋,我們討論的是SQLSERVER安全管理中的登陸和權(quán)限問題脂信。
SQLSERVER的登陸是安全管理的第一關(guān)。這個(gè)決定了那些人可以使用
SQLSERVER(就像進(jìn)屋時(shí)的房門鑰匙)埋泵。關(guān)于登陸控制丽声,SQLSERVER則采用
了兩種不同的檢查方式:windows驗(yàn)證和windows雁社,sqlserver混合驗(yàn)證磺浙。前者就
是我們登陸windows時(shí)的用戶帳號(hào)撕氧,而后者則是在保留前者的前提下也允許
SQLSERVER中建立的登陸帳號(hào)呵曹。這也是為用戶提供方便的選擇铐殃。
我們擁有了登陸的帳號(hào)富腊,就可以進(jìn)入SQLSERVER的控制中心是整,那我們可以做
些什么哪浮入?這個(gè)肯定是有控制的進(jìn)行的事秀。SQLSERVER中的訪問權(quán)限分為兩方
面易迹,分別是:服務(wù)器本身的操作權(quán)限和數(shù)據(jù)庫的訪問權(quán)限。我們分別加以簡介:
服務(wù)器的操作權(quán)限是從真?zhèn)€服務(wù)器來說的窘疮,是面向所有數(shù)據(jù)庫的定義考余。例如:是
否有權(quán)創(chuàng)建或者刪除登陸帳號(hào)楚堤,是否可以建立數(shù)據(jù)庫等等衅胀。這些也就是通過設(shè)置
服務(wù)器角色(server role)來實(shí)現(xiàn)的滚躯。SQLSERVER內(nèi)建了七個(gè)服務(wù)器角色掸掏,分
別代表七種服務(wù)器工作的操作權(quán)。
數(shù)據(jù)庫的訪問權(quán)限就是針對某一個(gè)數(shù)據(jù)庫而言的愿待。他可以分為兩層仍侥,第一層是限
制何人訪問數(shù)據(jù)庫农渊,第二層限制可訪問數(shù)據(jù)庫中的那些表腿时,視圖和存儲(chǔ)過程,以
及是否可以用select,insert,update等等徽鼎。這個(gè)權(quán)限往往是通過數(shù)據(jù)庫角色得以實(shí)
現(xiàn)的否淤。
(服務(wù)器角色不可以自定義,數(shù)據(jù)庫角色可以自定義)
僅僅知道上面這些概念是不行的助泽,因?yàn)镾QLSERVER中的權(quán)限是比較復(fù)雜的,
因?yàn)楸舜酥g可能存在某些權(quán)鏈鞍帝。所以僅僅概念是不容易說清的,我們討論的就
是基礎(chǔ)的東西蚓曼,懂得了這些在真正工作中才可以更好的掌握管理技能辟躏。我們簡單
的談?wù)剻?quán)鏈的問題吧会涎!
由于每個(gè)對象都有他自己的擁有權(quán)信息末秃,這個(gè)對象可能和其他對象存在一定的依
存關(guān)系惰匙,比如:一個(gè)視圖是從另外一個(gè)視圖建立過來的项鬼。這些相互依存的對象關(guān)
系可能拉的很長,因此相依存的對象的擁有權(quán)就形成一個(gè)由上而下的鏈結(jié)龄毡,這在
SQLSERVER中就稱作擁有權(quán)鏈(Ownership Chain)沦零。正是由于這樣路操,可能所產(chǎn)
生的訪問權(quán)限變得非常復(fù)雜程奠。所以瞄沙,我們在這里提出以視圖和存儲(chǔ)過程來限制訪
問范圍。通過視圖確定用戶可以訪問的內(nèi)容垫桂,然后把視圖的相關(guān)權(quán)限賦予具體的
用戶诬滩,這樣可以有效的減輕權(quán)限設(shè)置的工作量(特別是用戶訪問范圍跨度較大的
情況下)疼鸟。除了視圖空镜,我們也可以自定義存儲(chǔ)過程來對數(shù)據(jù)的訪問加以限制,即
把一組可查詢某特定數(shù)據(jù)的語句存成存儲(chǔ)過程洼怔,然后將其execute權(quán)限設(shè)置給用
戶茴厉,用戶就可以執(zhí)行他來取得數(shù)據(jù)了。這樣省去了很多復(fù)雜的授權(quán)過程嗜闻,是不是
很方便呀琉雳!
簡單的說了說這些翠肘,我們再來談?wù)凷QLSERVER中特殊的東西:sa帳號(hào)被丧,public
數(shù)據(jù)庫角色甥桂,guest數(shù)據(jù)庫用戶。
Sa是SQLSERVER默認(rèn)的管理員帳號(hào)办陷,主要是為了向下兼容而設(shè)置的懂诗。這個(gè)也
就是安裝好SQLSERVER時(shí)就有的帳號(hào)植旧,而且權(quán)限極大问窃,所以在安裝過程中最
好把他的密碼進(jìn)行設(shè)置域庇,不要為空听皿。這個(gè)帳號(hào)相當(dāng)于服務(wù)器角色中的system
administrator尉姨,而且不可以刪除九府。
Public數(shù)據(jù)庫角色是一個(gè)公共的數(shù)據(jù)庫角色侄旬,也就是說當(dāng)你新建一個(gè)數(shù)據(jù)庫角色
的時(shí)候,默認(rèn)的就屬于這個(gè)角色笔链。這個(gè)也是不可刪除的鉴扫。所以為了安全期間,我
們對public數(shù)據(jù)庫對象不要賦予過多的權(quán)限(除非有這個(gè)需要)莱预。
Guest是一個(gè)特殊的數(shù)據(jù)庫用戶依沮,類似于windows NT/2000下的guest帳號(hào),都
是給未經(jīng)授權(quán)的用戶提供某種程度的訪問權(quán)限辜限。如果不需要這個(gè)用戶可以將其刪
除薄嫡。
說了這些概念毫深,其實(shí)現(xiàn)都是通過“企業(yè)管理器”實(shí)現(xiàn)的,我們就這些談?wù)動(dòng)孟鄳?yīng)的
系統(tǒng)存儲(chǔ)過程:
登陸管理:sp_addlogin 新增帳號(hào)
sp_droplogin 刪除帳號(hào)
sp_grantlogins 允許某windows帳號(hào)訪問
sp_denylogins 禁止某windows帳號(hào)訪問
sp_revokelogins 刪除某windows帳號(hào)訪問
sp_helplogin 查看帳號(hào)信息
sp_addsrvrolemember 將某用戶添加到服務(wù)器角色
sp_dropsrvrolemember 將某用戶從數(shù)據(jù)庫角色中刪除
sp_helpsrvrole 查看服務(wù)器角色的信息
數(shù)據(jù)庫用戶管理:sp_grantaccess 建立數(shù)據(jù)庫用戶
sp_revokedbaccess 刪除數(shù)據(jù)庫用戶
sp_helpuser 查看用戶信息
數(shù)據(jù)庫角色管理:sp_addrole 建立數(shù)據(jù)庫角色
sp_addrolemember 將用戶加入數(shù)據(jù)庫角色
sp_helprole 查看數(shù)據(jù)庫角色信息
sp_helprolemember 查看某數(shù)據(jù)庫角色的所有成員
sp_droprole 刪除角色
sp_droprolemember 刪除角色中的某一成員
好了瘩蚪,看了上面的不要感覺麻煩呀疹瘦,這可是讓你高效工作的寶貝呀,熟能生巧险胰,
我們一起聯(lián)系多了起便,其實(shí)掌握就覺得很輕松了!繼續(xù)努力1谴:)
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
SQLSERVER2000攻略(1)-工作流程篇
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 11:51
SQLSERVER2000是windows平臺(tái)上一個(gè)重要的數(shù)據(jù)管理工具判沟。了解數(shù)據(jù)庫的朋
友對他一定很熟悉。我們就此在這里作一系列的討論,希望通過這次的交流我們
對SQLSERVER2000有個(gè)深刻的理解塘偎。首先吟秩,我們探討一下他的工作流程,這
可是工作的基礎(chǔ)呀壮池,好椰憋,我們開始了橙依!
簡單的說女责,SQLSERVER2000是個(gè)采用主從結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫系統(tǒng)抵知。哈辛藻,是不是
太簡單,畢竟現(xiàn)在市面上的數(shù)據(jù)庫產(chǎn)品幾乎都是這個(gè)結(jié)構(gòu)氮墨。我們來深入一點(diǎn)规揪,所
謂SQLSERVER的主從結(jié)構(gòu)(Client/Server),就是由SQLSERVER扮演存放數(shù)據(jù)
和提供數(shù)據(jù)給客戶端的角色,當(dāng)用戶要取用數(shù)據(jù)時(shí)奸忽,則可調(diào)用各種不同的客戶端
應(yīng)用程序栗菜,通過SQLSERVER所支持的接口,向SQLSERVER提供請求而咆,然后
取得數(shù)據(jù)庫中的數(shù)據(jù)并返回給用戶桂塞。這個(gè)過程應(yīng)該好理解吧阁危。
看了這個(gè)是不是覺得很easy呀!其實(shí)趴乡,這只是比較傳統(tǒng)的雙層式Client/Server
結(jié)構(gòu)晾捏,近年來三層式或者多層式主從結(jié)構(gòu)的應(yīng)用正在流行。例如:配合微軟的
BackOffice中的其他服務(wù)器產(chǎn)品胖齐,即可建立多層主從運(yùn)算模式。
了解了基本的數(shù)據(jù)流程剿另,那是不是要問是什么實(shí)現(xiàn)客戶端與服務(wù)器之間的溝通
哪雨女?這個(gè)是個(gè)比較有意義的問題五鲫。我們知道了作什么,就應(yīng)改知道他是怎么做的乱灵。
所謂,打破沙鍋問到底蝉稳!我們說一下工作原理:SQLSERVER提供了多種不同的
接口讓客戶端(應(yīng)用程序)順利與服務(wù)器進(jìn)行交流,在此接口的基礎(chǔ)上伙窃,由
NET#Library(網(wǎng)絡(luò)函數(shù)庫)建立兩邊IPC(Interprocess Commication)通訊管道來
進(jìn)行工作。具體的說就是:當(dāng)客戶端程序使用某種接口向服務(wù)器提出查詢請求時(shí)嚣鄙,
數(shù)據(jù)庫接口驅(qū)動(dòng)程序調(diào)用客戶端的Net#library,而Net#library則調(diào)用IPC應(yīng)用程序
接口產(chǎn)生IPC,通過IPC送達(dá)服務(wù)端廓八,服務(wù)端接受請求后經(jīng)SQLSERVER處理剧蹂,
以同樣的方式將結(jié)果送回客戶端。(這個(gè)過程有兩個(gè)情況冒冬,Client和Server在同
一臺(tái)計(jì)算機(jī)上简烤,Net#library會(huì)使用local IPC,如果是網(wǎng)絡(luò)存取挥萌,則會(huì)有雙方所使用
的網(wǎng)絡(luò)協(xié)議產(chǎn)生Remote IPC)圖示如下:
了解了外部工作機(jī)制引瀑,咱們看看服務(wù)端是怎么分工的憨栽,畢竟多數(shù)的數(shù)據(jù)工作是由
服務(wù)器完成的。整體上說锯蛀,整個(gè)SQLSERVER的數(shù)據(jù)管理系統(tǒng)分為如下幾個(gè)組
件:
▲Open Data Service(ODS):負(fù)責(zé)處理由Net#library送來的查詢請求旁涤,ODS會(huì)調(diào)用
SQLSERVER的內(nèi)部功能來完成客戶端的需求。
▲SQL Server Service:這個(gè)SQLSERVER的“心臟”負(fù)責(zé)管理我們的數(shù)據(jù)庫菌羽,以及
所有建立注祖,查詢和修改的數(shù)據(jù)庫的操作。此數(shù)據(jù)庫管理系統(tǒng)的核心又分為幾個(gè)單
元罩缴,其中最主要的兩個(gè)單元就是負(fù)責(zé)解SQL語法和安排查詢執(zhí)行計(jì)劃等工作的
關(guān)系引擎(Relational Engine),以及負(fù)責(zé)管理數(shù)據(jù)庫文件和文件讀寫等工作的存
儲(chǔ)引擎(Storage Engine)。這兩個(gè)組件之間則是通過OLE DB接口來通信的檬寂。
▲SQL SERVER Agent(SQL SERVER代言程序):可以說此組件是重要性僅次于
SQL SERVER Service的組件桶至,這個(gè)服務(wù)提供了有關(guān)工作編排塞茅,以及服務(wù)器有問
題時(shí)通知管理員等相關(guān)功能的支持。
▲MS DTC Service:如果將SQL SERVER安裝在多臺(tái)服務(wù)器上鞭光,要讓客戶端能夠
在單個(gè)事務(wù)中對不同的服務(wù)器(數(shù)據(jù)源)進(jìn)行處理惰许,就須借助MS DTC(Microsoft
Distributed Transaction Coordinator)Service來負(fù)責(zé)這類分布式事務(wù)的協(xié)調(diào)工作汹买,
以確保在各個(gè)數(shù)據(jù)庫上的更改操作能正確完成。
了解了上面的過程见妒,是不是有點(diǎn)印象了,來我們理清一下思路耻卡,問一下自己:客
戶端的工作請求怎么傳遞給服務(wù)器的劲赠?服務(wù)器又是怎么處理相應(yīng)的請求的?認(rèn)
真想想這兩個(gè)問題塑煎,其實(shí)你會(huì)覺得原來“不過如此”!_
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
SQLSERVER中使用存儲(chǔ)過程(Stored Procedure)
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 11:50
隨著SQLSERVER不斷的學(xué)習(xí)讯赏,認(rèn)識(shí)的深入,我們會(huì)發(fā)現(xiàn)越來越多的功能呈現(xiàn)
在我們面前磕谅,這些功能都是十分強(qiáng)大的,在我們應(yīng)用中發(fā)揮著十分有意義的作用放刨,
也因此感知作為一個(gè)大型的數(shù)據(jù)庫管理系統(tǒng)的魅力所在进统。從這一篇開始麻昼,我們著
手討論“存儲(chǔ)過程“抚芦,”觸發(fā)器“迈螟,”游標(biāo)“叉抡,”事務(wù)“和”鎖“的應(yīng)用,如果熟練的掌握
了這些答毫,我想駕馭SQLSERVER的能力將是一個(gè)新的層次褥民。學(xué)習(xí)是為了應(yīng)用,
掌握就是為了解決問題洗搂。希望通過我們一起的學(xué)習(xí)撵颊,我們都可以很好的利用這個(gè)
工具為我們服務(wù)妻熊。這是我們學(xué)習(xí)的目的也是我們的奮斗目標(biāo)亿胸。好拗馒,我們繼續(xù)吧挥等!
說起存儲(chǔ)過程郭宝,我們先了解他的概念衔统,這是我們討論必走的第一步:存儲(chǔ)過程就
是將所需要的工作怀薛,預(yù)先以SQL程序?qū)懞茫筮M(jìn)行保存,以后需要作這些
工作時(shí)可以使用EXECUTE指令來調(diào)用,即可自動(dòng)完成相應(yīng)任務(wù)。這里的存儲(chǔ)過
程也是自動(dòng)化的一個(gè)方面,總之就是為了方便管理的一種措施蚣常。讓我來說說他的
優(yōu)點(diǎn)吧:
1.執(zhí)行效率高(這點(diǎn)不容置疑)
2.統(tǒng)一的操作流程:也就是通過存儲(chǔ)過程的操作避免了一些操作過程中可能無
意中認(rèn)為的錯(cuò)誤粘姜,只要確定了制作存儲(chǔ)過程時(shí)是正確地号显,以后在調(diào)用過程中就不
用擔(dān)心了。大家使用時(shí)流程是一樣的劫灶。
3.重復(fù)使用
4.安全性:這一點(diǎn)我們在數(shù)據(jù)庫的安全策略里討論過,可以參考前邊的文章宿稀。
也就是說:我們可以利用存儲(chǔ)過程作為數(shù)據(jù)存儲(chǔ)的管道擂送。可以讓客戶在一定的范
圍內(nèi)對數(shù)據(jù)進(jìn)行操作问芬。另外,存儲(chǔ)過程是可以加密的最域,這樣別人就看不到他的內(nèi)
容了。
存儲(chǔ)過程分為三類:
系統(tǒng)存儲(chǔ)過程(System stored Procedure)sp_開頭熟丸,為SQLSERVER內(nèi)置存儲(chǔ)過
程:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
擴(kuò)展存儲(chǔ)過程(Extended stored Procedure)潜慎,也就是外掛程序,用于擴(kuò)展
SQLSERVER的功能竞穷,以sp_或者xp_開頭,以DLL的形式單獨(dú)存在。
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
Δ(觀察上面的你會(huì)發(fā)現(xiàn)系統(tǒng)存儲(chǔ)過程和擴(kuò)展存儲(chǔ)過程都是在master數(shù)據(jù)庫中。
sp_開頭的可是全局的浪秘,任何一個(gè)數(shù)據(jù)庫都可以直接調(diào)用的刷后。)
用戶定義的存儲(chǔ)過程(User#defined stored Procedure)二庵,這個(gè)就是用戶在具體的
數(shù)據(jù)庫中自己定義的攀涵,名字最好不要以sp_和xp_開頭炉媒,防止混亂蜗元。
了解了基本概念,就到應(yīng)用的階段了雅潭。
首先創(chuàng)建一個(gè)存儲(chǔ)過程(在pubs數(shù)據(jù)庫中)太援,我們命名為MyProce示例代碼如下(功
能為向stores表中插入stor_id,stor_name兩個(gè)字段值):
create procedure MyProce
@param1 char(4), @param2 varchar(40)——定義參數(shù),作為存儲(chǔ)過程的接口
with encryption——存儲(chǔ)過程加密
as insert stores (stor_id,stor_name) values(@param1,@param2)
go
我們?nèi)绱苏{(diào)用:
exec MyProce .111111.,.Leijun.book.——參數(shù)賦值阶牍,調(diào)用存儲(chǔ)過程
用企業(yè)管理器創(chuàng)建如圖所示:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
如果我們要修改,可以查看相應(yīng)的存儲(chǔ)過程的“屬性“待讳,如上圖在”文本“窗體中修
改碧浊。
但是注意我們這個(gè)因?yàn)橛昧藈ith encryption語句,所以,打開時(shí)將有下面的提示凸丸,
不允許查看,這也就是加密。
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
看了上面的是不是有所了解了阎姥,其實(shí)創(chuàng)建時(shí)還有其他的參數(shù)可以使用摘能,我們這里
只是一個(gè)簡單的例子复隆,更多的應(yīng)用需要我們在實(shí)踐中不斷的總結(jié)镇饮,這樣才能更加
靈活的應(yīng)用。 下面我們再來看一個(gè)創(chuàng)建的例子(這個(gè)的作用是在authors表中查
找一個(gè)人名,表中把一個(gè)名字分為兩字段存儲(chǔ)了唁毒,如果查到了陈瘦,打印“查有此人
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
我們這樣執(zhí)行:Exec SearchMe .leijun.,null
由于查找到了所以顯示如下:
screen.width#333)this.width=screen.width#333" border="0"
galleryimg="no" />
例子就簡單列舉這些郁轻,因?yàn)樗撵`活性很大须喂,所以我們只簡單的說明一下级野,如果
要更好的利用,這就需要我們不斷的摸索了并炮。
下面我們談?wù)勈褂眠^程中我了解到的注意事項(xiàng):
1.在存儲(chǔ)過程中,有些建立對象的語句是不可使用的:create default,create
trigger,create procedure,create view,create rule.
2.在同一數(shù)據(jù)庫中饵溅,不同的所有者可以建立相同名稱的對象名杆查。例如:
a.sample,b.sample,c.sample三個(gè)數(shù)據(jù)表可以同時(shí)存在。如果存儲(chǔ)過程中未指明對
象的所有者(例如存儲(chǔ)過程中的語句select * from sample星著,這句中的sample沒有
指明所有者)购笆,在執(zhí)行的過程中默認(rèn)的所有者查找順序是:相應(yīng)的存儲(chǔ)過程的建
立者->相應(yīng)數(shù)據(jù)庫的所有者。如果這個(gè)查找過程中沒有把所有者確定下來虚循,系
統(tǒng)就要報(bào)錯(cuò)同欠。
(這里我額外插一句:如果需要嚴(yán)密的數(shù)據(jù)操作样傍,在任何操作中盡量加上所有者,
例如leijun.sample)
3.在存儲(chǔ)過程名稱前邊添加F趟欤或者##衫哥,所建立的存儲(chǔ)過程則是“臨時(shí)存儲(chǔ)過程
“(#是局部臨時(shí)存儲(chǔ)過程,##是全局臨時(shí)存儲(chǔ)過程)襟锐。
上面的都是一些容易忽略的撤逢,特別是第二條,我們一定的認(rèn)真思考粮坞,也許這些有
意無意的忽略是我們造成錯(cuò)誤的根源N萌佟!
轉(zhuǎn)載自:leijun
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
[Php+APACHE+MySQL][或在windows已裝IIS下的]配置
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 09:30
前段時(shí)間的文章:
http://www.blueidea.com/bbs/NewsDetail.asp?id=2372560
可以一看,但是其對本篇價(jià)值是 1%.希望本篇能補(bǔ)充之缺陷.
一: 下載安裝程序
Apache可以從http://httpd.apache.org/download.cgi下載
PHP可以從http://www.php.net下載.
mysql在www.mysql.com/下載.
二 安裝程序(以下以2k為例說明,其他windows系統(tǒng)的類似)
首先如果您安裝了IIS的話,Internet 服務(wù)管理器##->默認(rèn)web站點(diǎn)#->右擊##->停
止.
1: 先是Apache,有4.2M左右,沒啥說的,點(diǎn)擊安裝到D盤,為了方西系統(tǒng)重裝,D盤
方便.一路會(huì)很容易的安裝的成功.
2: php 5.1.X的安裝版是 2.44m 左右,可以點(diǎn)擊安裝,選擇服務(wù)器的時(shí)候選擇
apache,不過,沒有組建擴(kuò)展,還有下載擴(kuò)展的dll文件包(有的 19 m左右,不一定),
復(fù)制到C:WINNT目錄下面的.可以直接復(fù)制到d盤文件下面也可以,筆者不知道
為什么選擇了第一種.
3: MySQL我下載的是 4.1.7版本, 36.7M左右,也是一路點(diǎn)擊,然后啟動(dòng)之.
三: 必要設(shè)置
如果我們要使用CGI二進(jìn)制文件,那么我們要將如下指令插入到 Apache 的
httpd.conf 配置文件中捞蚂,以設(shè)置 CGI 二進(jìn)制文件:
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 的模塊妇押,那么就一定要移動(dòng) php4ts.dll 到
winnt/system32(Windows NT/2000)或 windows/system32(Windows XP)跷究,覆
蓋原有文件(如果有的話)姓迅,對于 PHP 5,這個(gè)文件是 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 文件可通過計(jì)算機(jī)搜索找出.哈哈....
再在里面找出:
DocumentRoot "D:/web/web/php"
相關(guān)行,可以修改成自己的php網(wǎng)站根目錄.
如果你把那些擴(kuò)展都復(fù)制到 C:winnt下面的話.
測試:<html>
<body>
<? phpinfo(); ?>
</body>
<html>
應(yīng)該:正常可以看到的.
關(guān)于連接MySQL的,請看:
http://www.blueidea.com/bbs/NewsDetail.asp?id=2408054
為了您的IIS能繼續(xù)工作,請 在internet信息服務(wù)——-> 默認(rèn)web站點(diǎn)#->右擊屬
性##-> IP地址:192.168.1.105 , 端口: 81 ,否則會(huì)提示端口以已使用之類的信息.
完畢,有問題請馬上提出,早安.
天氣:大雨,ccdot發(fā)表于2006#1#21 2:48:43,閱讀了460次,共有個(gè)1回復(fù).
花了大半天的時(shí)間柴我,終于把全新的php平臺(tái)建了起來解寝,歷經(jīng)了太多錯(cuò)誤和反復(fù),
看了網(wǎng)上無數(shù)篇教材艘儒,可仍錯(cuò)漏百出聋伦,唉,真不知道那些寫教程的人在寫什么界睁。
不過蒼天不負(fù)有心人觉增,摸索了好久,最終還是成功了.:) ..寫下來翻斟,以后也有個(gè)
參照逾礁。
調(diào)試環(huán)境如下:
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 //默認(rèn)php文檔位置嘹履,設(shè)為apache中一樣,偶沒設(shè)债热,卻也行!!
.extension_dir = F:/server/php/ext //擴(kuò)展文件位置,用作支持mysql砾嫉,一定要設(shè)正確
.session.save_path = c:/temp //session存儲(chǔ)位置
.cgi.force_redirect=0 //如果出現(xiàn)Security Alert! The PHP CGI cannot be accessed
directly的警告,設(shè)置此值
.register_global窒篱,把它設(shè)置為on. //避免post變量不能傳遞
.display_errors = on //顯示錯(cuò)誤消息
●裝好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
這樣就已經(jīng)可以支持了php了济锄,不知網(wǎng)上的教程里為什么還要把那些dll文件
復(fù)制得滿天飛(版本是相同的)暑椰,郁悶。
2荐绝、httpd.conf的一些其他必要設(shè)置:
.索引頁名稱 DirectoryIndex index.php
.默認(rèn)文檔位置一汽,設(shè)置 DocumentRoot路徑
3、網(wǎng)上流傳的配置低滩,我沒有copy召夹,但也成功了。
.把php5ts.dll復(fù)制到winnt目錄或system目錄中
●安裝mysql到f:/servermysql中恕沫。運(yùn)行bin目錄中winmysqladmin.exe监憎。設(shè)置你的
用戶名和密碼,端口不必更改婶溯。
●接著讓PHP支持Mysql數(shù)據(jù)庫
.將安裝目錄中的php.ini#recommended復(fù)制到winnt目錄中鲸阔,改名為php.ini
查找 [MySQL] 字段內(nèi)的內(nèi)容.修改如下.
mysql.default_port = 3306
// 這里是MYSQL的端口.
mysql.default_host = localhost
// 這里是本地主機(jī).
mysql.default_user = root
// 這里是用戶
mysql.default_password = abcdefg
// 這里是密碼
修改到這里就可以讓 Php 與 MYSQL 關(guān)聯(lián)了.
最后啟動(dòng) PHP 對 MYSQL 模塊支持.
查找 extension=php_mysql.dll 字串.刪除掉前面的 ; 號(hào)
extension=php_mysql.dll
請注意.如果不啟動(dòng) PHP 對 MYSQL 模塊支持.將無法使 PHPMYADMIN 正
常工作.將提示:
cannot load MySQL extension, please check PHP Configuration
無法裝入 MySQL 擴(kuò)展,請檢查 PHP 的配置迄委。
可是我設(shè)置完這樣褐筛,重啟apache卻出現(xiàn)找不到libmySQL.dll動(dòng)態(tài)鏈接庫的提示,
幾經(jīng)折磨才發(fā)現(xiàn)叙身,必須把php中的libmysql.dll復(fù)制到apache中的bin目錄中才
ok(網(wǎng)上教材可沒有)渔扎。
●讓apache也支持mysql
把php目錄下的libmySQL.dll復(fù)制到apache的bin目錄下。
ok信轿,調(diào)試phpinfo()晃痴,一切正常〔坪觯可是我寫了句 echo "我愛你";倘核,就出現(xiàn)了中文亂
碼。老問題定罢,從網(wǎng)上搜得一段話笤虫,順利解決了問題。
●原因很簡單祖凫,由于Apache它默認(rèn)的編碼是西歐編碼琼蚯,你只要在“httpd.conf”中
找到“AddDefaultCharset ISO#8859#1”將它修改為“AddDefaultCharset GB2312 ”,
保存然后重新啟動(dòng)Apache再試惠况,可能有的朋友的已經(jīng)解決了遭庶,但還是有很多的
朋友的網(wǎng)站依然是亂碼,包括我的稠屠,這是什么原因呢峦睡,網(wǎng)上也有介紹把它改為
“AddDefaultCharset off ”翎苫,可能在你的網(wǎng)站也不一定行得通,實(shí)質(zhì)問題在于它是
由網(wǎng)頁制作軟件引起的榨了,如果你使用的是Macromedia公司的Dreamweaver系列
軟件制作的煎谍,由于它的編碼為“gb2312”,所以就會(huì)出現(xiàn)亂碼龙屉,因此你只要在你網(wǎng)
頁的代碼中找到“”呐粘,把“gb2312”改為“GB2312”然后保存網(wǎng)頁,再試試看转捕,行了吧作岖!
是不是太簡單了,但是我為了把這亂碼問題解決五芝,也足足花了二天的時(shí)間才找到
真正的原因痘儡,如果你做好了,別忘記請我喝酒呀枢步!
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
MSSQL經(jīng)典語句
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 09:24
1.按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate
Chinese_PRC_Stroke_ci_as
2.數(shù)據(jù)庫加密: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.查看硬盤分區(qū):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.殺掉所有的事件探察器進(jìn)程: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到結(jié)尾記錄
Select Top N * From 表 Order by ID Desc
8.如何修改數(shù)據(jù)庫的名稱:sp_renamedb 'old_name', 'new_name'
9:獲取當(dāng)前數(shù)據(jù)庫中的所有用戶表select Name from sysobjects where xtype='u'
and status>=0
10:獲取某一個(gè)表的所有字段select name from syscolumns where id=object_id('表
名')
11:查看與某一個(gè)表相關(guān)的視圖价捧、存儲(chǔ)過程丑念、函數(shù)select a.* from sysobjects a,
syscomments b where a.id = b.id and b.text like '%表名%'
12:查看當(dāng)前數(shù)據(jù)庫中所有存儲(chǔ)過程select name as 存儲(chǔ)過程名稱 from
sysobjects where xtype='P'
13:查詢用戶創(chuàng)建的所有數(shù)據(jù)庫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:查詢某一個(gè)表的字段和數(shù)據(jù)類型select column_name,data_type from
information_schema.columns
where table_name = '表名'
[n].[標(biāo)題]:Select * From TableName Order By CustomerName
[n].[標(biāo)題]:Select * From TableName Order By CustomerName
from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
觸發(fā)器#MSSQL常用操作
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 09:18
不再新開文章.
這里只打算講解四部分了涡戳,也就最簡單结蟋、最常用的四部分。
1渔彰、觸發(fā)器嵌屎。
定義: 何為觸發(fā)器?在SQL Server里面也就是對某一個(gè)表的一定的操作恍涂,觸發(fā)
某種條件宝惰,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程再沧。
常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件尼夺。(SQL Server 2000
定義了新的觸發(fā)器,這里不提)
我為什么要使用觸發(fā)器炒瘸?比如淤堵,這么兩個(gè)表:
Create Table Student(——學(xué)生表
StudentID int primary key,——學(xué)號(hào)
....
)
Create Table BorrowRecord(——學(xué)生借書記錄表
BorrowRecord int identity(1,1),——流水號(hào)
StudentID int ,——學(xué)號(hào)
BorrowDate datetime,——借出時(shí)間
ReturnDAte Datetime,——?dú)w還時(shí)間
...
)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同
時(shí)更改借書記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí)顷扩,也刪除它的借書記錄拐邪。
等等。
這時(shí)候可以用到觸發(fā)器隘截。對于1扎阶,創(chuàng)建一個(gè)Update觸發(fā)器:
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
理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted , Inserted 汹胃。注意Deleted 與Inserted
分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。
一個(gè)Update 的過程可以看作為:生成新的記錄到Inserted表东臀,復(fù)制舊的記錄到
Deleted表着饥,然后刪除Student記錄并寫入新紀(jì)錄。
對于2惰赋,創(chuàng)建一個(gè)Delete觸發(fā)器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表贱勃;B.觸發(fā)機(jī)制。
這里我們只講解最簡單的觸發(fā)器谤逼。復(fù)雜的容后說明贵扰。
事實(shí)上,我不鼓勵(lì)使用觸發(fā)器流部。觸發(fā)器的初始設(shè)計(jì)思想戚绕,已經(jīng)被“級(jí)聯(lián)”所替代.
來自:http://www.innerv.com/blogview.asp?logID=512
分類: ( 一般分類 ) :: 評論 (0) :: 靜態(tài)鏈接網(wǎng)址 :: 引用 (0)
<!##——>
MSSQL數(shù)據(jù)庫導(dǎo)出和導(dǎo)入
發(fā)表人:kendy517 | 發(fā)表時(shí)間: 2007年二月09日, 09:17
SQL Server導(dǎo)出導(dǎo)入數(shù)據(jù)方法
2004#02 余楓 一、導(dǎo)出導(dǎo)入SQL Server里某個(gè)數(shù)據(jù)庫 1.在SQL Server企業(yè)管理
器里選中要轉(zhuǎn)移的數(shù)據(jù)庫枝冀,按鼠標(biāo)右鍵舞丛,選所有任務(wù)->備份數(shù)據(jù)庫。 2.備份 選
數(shù)據(jù)庫#完全果漾, 目的 備份到 按添加按鈕 文件名 在SQL Server服務(wù)器硬盤下輸
入一個(gè)自定義的備份數(shù)據(jù)庫文件名(后綴一般是bak) 重寫 選重寫現(xiàn)有媒體 最
后按確定按鈕球切。 如果生成的備份數(shù)據(jù)庫文件大于1M,要用壓縮工具壓縮后再
到Internet上傳輸绒障。 3.通過FTP或者remote desktop或者pcanywhere等方法 把
第二步生成的備份數(shù)據(jù)庫文件或者其壓縮后的文件傳到目的SQL Server數(shù)據(jù)庫吨凑,
如果有壓縮要解壓。 4.目的SQL Server數(shù)據(jù)庫如果還沒有此數(shù)據(jù)庫户辱,先創(chuàng)建一
個(gè)新的數(shù)據(jù)庫鸵钝; 然后選中這個(gè)新創(chuàng)建的數(shù)據(jù)庫,按鼠標(biāo)右鍵庐镐,選所有任務(wù)->還
原數(shù)據(jù)庫 還原->從設(shè)備->選擇設(shè)備->磁盤->添加(找到要導(dǎo)入的備份數(shù)據(jù)庫文件
名)->確定 還原備份集->數(shù)據(jù)庫#完全 最后按確定按鈕恩商。完全的數(shù)據(jù)庫導(dǎo)入成
功了。 (如果在已經(jīng)存在的SQL Server數(shù)據(jù)庫上還原數(shù)據(jù)庫可能遇到有還有其它
人正在使用它而恢復(fù)操做失敗必逆, 可以去看 ->管理->當(dāng)前活動(dòng)->鎖/對象->找到數(shù)
據(jù)庫下鎖的進(jìn)程號(hào)->到查詢分析器里用kill 進(jìn)程號(hào)殺掉這些鎖怠堪, 然后再做還原)
注意:如果在原有的目的SQL Server數(shù)據(jù)庫上從備份文件(*.bak)還原數(shù)據(jù)庫 會(huì)
把已經(jīng)存在的表、存儲(chǔ)過程等數(shù)據(jù)庫對象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫
里的內(nèi)容名眉。 如果一定要還原備份文件(.bak)里部分?jǐn)?shù)據(jù),需要另外建一個(gè)新數(shù)據(jù)
庫, 其邏輯名稱和數(shù)量同備份文件(.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致粟矿; 新
數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一
樣才行。 二璧针、導(dǎo)出導(dǎo)入SQL Server里某個(gè)表 1.沒有防火墻嚷炉,同一個(gè)局域網(wǎng)里或
不在同一個(gè)局域網(wǎng)里,但通過Internet可以互相訪問 在SQL Server企業(yè)管理器里
選中目的數(shù)據(jù)庫 ,按鼠標(biāo)右鍵探橱,選所有任務(wù)->導(dǎo)入數(shù)據(jù)-> 彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)
入/導(dǎo)出向?qū)Т翱?>下一步-> 選數(shù)據(jù)源-> 數(shù)據(jù)源(用于SQL Server的Microfost
OLE DB提供程序)-> 服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)
器,或者直接輸入IP地址)-> 選擇使用windows身份驗(yàn)證還是使用SQL Serve身
份驗(yàn)證(輸入數(shù)據(jù)庫的用戶名和密碼)-> 數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)
器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步-> 選擇目的->目的(用于SQL Server的
Microfost OLE DB提供程序)-> 服務(wù)器(默認(rèn)為上一步里選中的導(dǎo)出服務(wù)器申屹,也
可以選其它局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器,或者直接輸入IP地
址)-> 目的數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)
庫)->下一步-> 制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可
———————————————————————————————————————