當前位置:首頁 » 編程語言 » sqlvarying
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlvarying

發布時間: 2022-09-30 20:12:19

A. sql中varbinary 是什麼數據類型

varbinary 類型和char與varchar類型是相似的,只是他們存儲的是二進制數據,也就是說他們是包含位元組流而不是字元流,他們有二進制字元的集合和順序,他們的對比,排序是基於位元組的數值進行的

binary與varbinary的最大長度和char與varchar是一樣的,只不過他們是定義位元組長度,而char和varchar對應的是字元長度。Varbinary是一個可以改變長度的二進制數據。

Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到 8000。其存儲窨的大小是 n + 4個位元組,不是n 個位元組。

varbinary在插入不會去填補0x00位元組,查詢的時候也不會丟棄任何位元組,在比較的時候,所有的位元組都是有效的,並且0x00<space (space對應的是0x20)。

(1)sqlvarying擴展閱讀:

varbinary( n | max):可變長度,n 的取值范圍為 1 至 8,000,max 是指最大存儲空間是 2^31-1 個位元組,即最大4GB;

在將數據轉換為二進制數據時,SQL Server會對生成的二進制數據進行填充或截斷,詳細的規則是:

1、填充(或擴展)的二進制數據是16進制的0x00的整數倍,這就是說,填充的位元組中每一個bit都是0;

2、將字元類型轉換成二進制數據時,在數據的右側填充或截斷數據,填充數值是0x00;

3、將其他類型數據轉換成二進制數據時,在數據的左側填充或截斷數據,填充數值是0x00;在截斷數據時,保留低位的數據,將高位數值截斷。

B. 怎樣在Sql server中創建,執行和刪除存儲過程

存儲過程是一類編譯好的程序,在創建時進行編譯,之後需要的時候值需要使用使用調用語句調用EXEC。

儲存過程的分類:
1. 系統存儲過程,存放在MASTER資料庫中,以SP_前綴。
2. 用戶自定義存儲過程。

在SQL SERVER中創建儲存過程語法:
Create proc[ere] procere_name[;number]
[{@parameter data_type}
[varying][=default][output]
][,…n]
[with {recompile|encryption|encrypton,recomption}]
[for enplication]
As
Sql_statement[,…n]
參數:
整個語法中只有兩個參數是必須的:procere_name存儲過程名稱和sql_statement存儲過程內容。
procere_name:存儲過程名稱。
;number:對存儲過程分組,「;數字」表示是一組存儲過程,便於批量操作。
@parameter:參數名,命名必須用@開頭;局部變數以@開頭,全局變數以@@開頭。
data_type:參數類型。
varying:指定作為輸出參數的結果集。
Default:參數的默認值。
Output:表示為輸出參數,返回值給execute/exe。
[with {recompile|encryption|encrypton,recomption}][for enplication]:這個我還不明白。。。
As:指定儲存過程要執行的操作。

執行存儲過程語法:
Exec[ute] 存儲過程名 參數

實驗一下,看看效果:
1.創建一組存儲過程並且執行
create procere procere_a;1
as
select * from student
go
create procere procere_a;2
as
select * from student
go
執行創建效果截圖:

圖1創建一組存儲過程
2.執行語句:
Execute procere_a
效果截圖:

圖2執行存儲過程效果截圖
3.刪除語句:
Drop procere procere_a
效果截圖

圖3刪除一組儲存過程效果截圖

創建帶輸入參數的存儲過程:輸入參數是程序將參數值傳遞給存儲過程。
創建一個帶輸入參數的存儲過程,設置默認值,並且對輸入參數的值進行判斷。
Create procere pro_1
@pro_1_a varchar(20)=null
As
If @pro_1_a is null
Print'請輸入需要查詢的所屬院系:'
else
Select avg(成績) from student where 所屬院系=@pro_1_a
分別執行一下:
1.exec pro_1
效果截圖:

圖4執行不帶輸入參數的語句
2.exec pro_1 『計算機』
效果截圖:

圖5執行帶輸入參數的語句
哈哈,verygood,有進步啊。

創建帶輸出參數的存儲過程:輸出參數是存儲過程將返回值傳遞給程序。
1.輸出函數需要指定output作為標識
2.聲明變數需要使用declare
3.給變數指定值需要使用select
來一個例子:如果一個數大於5,則計算他的階乘。
Create procere pro_2
/*聲明輸入輸出參數*/
@in_x int,
@out_y int output
as
/*聲明標量,並且賦值為1*/
Declare @x int,@y int
Select @x=1,@y=1
/*if語句判斷輸入值是否合法,使用while循環語句計算*/
If @in_x<=5
Print'請輸入大於5的數:'
Else
While @x<=@in_x
Begin
Select @y=@y*@x
Select @x=@x+1
End
Select @out_y=@y
1.執行以上創建代碼

圖6創建帶輸入輸出參數的存儲過程截圖
2.提供參數執行代碼
Declare @out_sum int
Exec pro_2 6,@out_sum output
Select @out_sum as result

圖7提供輸入輸出參數執行存儲過程截圖

創建多條語句的存儲過程:一個存儲過程中可以寫入多條SQL語句,這些語句將被依次執行,可以實現多個功能。

刪除存儲過程delete及判斷對象是否存在exists:
Delete procere procere_name
If exists(select子查詢):如果exists的參數查詢為非空,則exists結果為true,否則為假。
存儲過程作為一個對象將被保存在資料庫的sysobjects表中,可以使用語句判斷這個對象是否存在:select * from sysobjects where name=』procere_name』

幾個系統存儲過程的使用:
Sp_name:重命名對象-- Sp_name object1,object2
Sp_depends:顯示引用對象—sp_depends students
Sp_help:顯示對象信息
Sp_helptext:顯示對象的源代碼

C. 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_wage*1.08
when job_level = 』2』 then e_wage*1.07
when job_level = 』3』 then e_wage*1.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 stocksex = '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 procere 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

D. sql server 常用的幾個數據類型

Sql
server中常用的幾個數據類型:
binary
固定長度的二進制數據,其最大長度為
8,000
個位元組。
varbinary
可變長度的二進制數據,其最大長度為
8,000
個位元組。
image
可變長度的二進制數據,其最大長度為
2G+
-
1
(2,147,483,647)
個位元組
text
伺服器代碼頁中的可變長度非
Unicode
數據的最大長度為
2G+
(2,147,483,647)
個字元。當伺服器代碼頁使用雙位元組字元時,存儲量仍是
2,147,483,647
位元組。存儲大小可能小於
2,147,483,647
位元組(取決於字元串)。
image
可變長度二進制數據介於
0

2G+
(2,147,483,647)
位元組之間
--binary

varbinary
固定長度
(binary)
的或可變長度
(varbinary)

binary
數據類型。
binary
[
(
n
)
]
固定長度的
n
個位元組二進制數據。N
必須從
1

8,000。存儲空間大小為
n+4
位元組。
varbinary
[
(
n
)
]
n
個位元組變長二進制數據。n
必須從
1

8,000。存儲空間大小為實際輸入數據長度
+4
個位元組,而不是
n
個位元組。輸入的數據長度可能為
0
位元組。在
SQL-92

varbinary
的同義詞為
binary
varying。
注釋
1.
如果在數據定義或變數聲明語句中沒有指定
n,默認長度為
1。如果沒有用
CAST
函數指定
n,默認長度為
30。
2.
當列數據項大小一致時應使用
binary。
3.
當列數據項大小不一致時應使用
varbinary

E. sql中數據類型的長度

1.varchar,0在資料庫中作為字元串中的一個字元是不能被隱藏的,而作為int則會被隱藏;
2.datetime,專門用於存放時間的數據類型;
3.字元串,字元只是一字元串中的一個個體,字元只能表示一個字母或漢字;
4.
首先,我們來看下nvarchar和varchar的官方幫助里的說明:
varchar(n)
長度為
n
個位元組的可變長度且非
unicode
的字元數據。n
必須是一個介於
1

8,000
之間的數值。存儲大小為輸入數據的位元組的實際長度,而不是
n
個位元組。所輸入的數據字元長度可以為零。varchar

sql-92
中的同義詞為
char
varying

character
varying。
nvarchar(n)
包含
n
個字元的可變長度
unicode
字元數據。n
的值必須介於
1

4,000
之間。位元組的存儲大小是所輸入字元個數的兩倍。所輸入的數據字元長度可以為零。nvarchar

sql-92
中的同義詞為
national
char
varying

national
character
varying。
二、該如何選擇兩種字元呢?
varchar和nvarchar都能存儲漢字。區別在於,一個漢字佔varchar(2),只佔nvarchar(1),而字母只佔varchar(1),那麼在資料庫欄位求長度的時候,用varchar你就不一定知道它確切的知道它到底有幾個字,如果用nvarchar,那麼漢字也是nvarchar(1),字母也是nvarchar(1),那麼已經很明顯了.
同時,varchar的檢索快於nvarchar。
至於,具體該選擇哪種,看你自己的想法和需求了
5.單引號表示單引號中的數據是實際數據,如:int
test=5;
select
'test'與select
test不同,前者會是字元串test,而後者則是5
6.'
'表示的是一個空格,表明name1與name2中間有一個空格,而三者組合成一個字元串並且所在的列命名為name

F. 怎麼計算sql中數據類型的范圍

SQL數據類型詳解

bit 整型
其值只能是0、1或空值。
這種數據類型用於存儲只有兩種可能值的數據,如Yes 或No、True 或False 、On
或Off.

int 整型 4個位元組
從- 2^31(-2147483648)到2^31 (2147483
647)之間的整數。
存儲到資料庫的幾乎所有數值型的數據都可以用這種數據類型。

smallint 整型 2個位元組
smallint 數據類型可以存儲從- 2^15(-32768)到2^15(32767)之間的整數。

tinyint 整型 1個位元組
tinyint 數據類型能存儲從0到255 之間的整數。

numeric 、 decimal 精確數值型

從-1038-1到1038-1的固定精度和范圍的數值型數據。
使用這種數據類型時,必須指定范圍和精度。
范圍是小數點左右所能存儲的數字的總位數,精度是小數點右邊存儲的數字的位數。

money 貨幣型
這種數據類型能存儲從-9220億到9220 億之間的數據,精確到貨幣單位的萬分之一。

smallmoney 貨幣型
這種數據類型能存儲從-214748.3648 到214748.3647
之間的數據,精確到貨幣單位的萬分之一。

float 浮點數值型
從-1.79E+308到1.79E+308 之間的任意數。

real 實型
在-3.40E+38到3.40E+38之間的浮點數。

datetime 日期時間型

從1753年1月1日到9999年12月31日間所有的日期和時間數據,精確到三百分之一秒或3.33毫秒。

Smalldatetime 日期時間型
從1900年1月1日到2079年6月6日間的日期和時間,精確到一分鍾。

cursor 特殊數據型
它包含一個對游標的引用。這種數據類型用在存儲過程中,而且創建表時不能用。

timestamp 特殊數據型

用來創建一個資料庫范圍內的唯一數碼。
一個表中只能有一個timestamp列。每次插入或修改一行時,timestamp列的值都會改變。

Uniqueidentifier 特殊數據型
全局唯一標識符,即GUID。可以使用NEWID
函數或轉換一個字元串為唯一標識符來初始化具有唯一標識符的列 .

char 字元型

存儲指定長度的定長非統一編碼型的數據。當定義一列為此類型時,你必須指定列長。
當你總能知道要存儲的數據的長度時,此數據類型很有用。
此數據類型的列寬最大為8000
個字元.

varchar 字元型
用來存儲非統一編碼型字元數據。與char
型不一樣,此數據類型為變長。
當定義一列為該數據類型時,你要指定該列的最大長度。

它與char數據類型最大的區別是,存儲的長度不是列長,而是數據的長度.

text 字元型

用來存儲大量的非統一編碼型字元數據。
這種數據類型最多可以有2^31-1或20億個雙位元組字元.

nchar 統一編碼字元型

用來存儲定長統一編碼字元型數據。統一編碼用雙位元組結構來存儲每個字元,而不是用單位元組(普通文本中的情況)。它允許大量的擴展字元。此數據類型能存儲4000種字元,使用的位元組空間上增加了一倍.

nvarchar 統一編碼字元型
nvarchar
數據類型用作變長的統一編碼字元型數據。此數據類型能存儲4000種字元,使用的位元組空間增加了一倍.

ntext 統一編碼字元型
ntext 數據類型用來存儲大量的統一編碼字元型數據。
這種數據類型能存儲2^30
-1或將近10億個字元,且使用的位元組空間增加了一倍

binary 二進制數據類型
binary數據類型用來存儲可達8000
位元組長的定長的二進制數據。當輸入表的內容接近相同的長度時,你應該使用這種數據類型.

varbinary 二進制數據類型
varbinary 數據類型用來存儲可達8000
位元組長的變長的二進制數據。當輸入表的內容大小可變時,你應該使用這種數據類型

image 二進制數據類型
image 數據類型用來存儲變長的二進制數據,最大可達2^31-1或大約20億位元組

---------------------------------------------------
(1)二進制數據類型

二進制數據包括 Binary、Varbinary 和 Image
Binary
數據類型既可以是固定長度的(Binary),也可以是變長度的。
Binary[(n)] 是 n 位固定的二進制數據。其中,n 的取值范圍是從 1 到
8000。其存儲窨的大小是 n + 4 個位元組。
Varbinary[(n)] 是 n 位變長度的二進制數據。其中,n 的取值范圍是從 1 到
8000。其存儲窨的大小是 n + 4個位元組,不是n 個位元組。
在 Image 數據類型中存儲的數據是以位字元串存儲的,不是由 SQL Server
解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。

(2)字元數據類型

字元數據的類型包括 Char,Varchar 和 Text
字元數據是由任何字母、符號和數字任意組合而成的數據。
Varchar
是變長字元數據,其長度不超過 8KB。Char 是定長字元數據,其長度最多為 8KB。超過 8KB 的ASCII 數據可以使用Text數據類型存儲。例如,因為
Html 文檔全部都是 ASCII 字元,並且在一般情況下長度超過 8KB,所以這些文檔可以 Text 數據類型存儲在SQL Server 中。

(3)Unicode 數據類型

Unicode 數據類型包括 Nchar,Nvarchar 和Ntext
在 Microsoft SQL Server 中,傳統的非
Unicode 數據類型允許使用由特定字元集定義的字元。在 SQL Server安裝過程中,允許選擇一種字元集。使用 Unicode
數據類型,列中可以存儲任何由Unicode 標準定義的字元。在 Unicode
標准中,包括了以各種字元集定義的全部字元。使用Unicode數據類型,所戰勝的窨是使用非 Unicode 數據類型所佔用的窨大小的兩倍。
在 SQL
Server 中,Unicode 數據以 Nchar、Nvarchar 和 Ntext
數據類型存儲。使用這種字元類型存儲的列可以存儲多個字元集中的字元。當列的長度變化時,應該使用Nvarchar 字元類型,這時最多可以存儲 4000
個字元。當列的長度固定不變時,應該使用 Nchar 字元類型,同樣,這時最多可以存儲4000 個字元。當使用 Ntext 數據類型時,該列可以存儲多於 4000
個字元。

(4)日期和時間數據類型

日期和時間數據類型包括 Datetime 和
Smalldatetime兩種類型
日期和時間數據類型由有效的日期和時間組成。例如,有效的日期和時間數據包括「4/01/98
12:15:00:00:00 PM」和「1:28:29:15:01AM
8/17/98」。前一個數據類型是日期在前,時間在後一個數據類型是霎時間在前,日期在後。在 Microsoft SQL
Server中,日期和時間數據類型包括Datetime 和 Smalldatetime 兩種類型時,所存儲的日期范圍是從 1753 年 1 月 1
日開始,到9999 年12 月 31 日結束(每一個值要求 8 個存儲位元組)。使用 Smalldatetime 數據類型時,所存儲的日期范圍是 1900年 1
月 1日 開始,到 2079 年 12 月 31 日結束(每一個值要求 4
個存儲位元組)。
日期的格式可以設定。設置日期格式的命令如下:
Set DateFormat {format | @format
_var|
其中,format | @format_var 是日期的順序。有效的參數包括 MDY、DMY、YMD、YDM、MYD 和
DYM。在默認情況下,日期格式為MDY。
例如,當執行 Set DateFormat YMD 之後,日期的格式為年 月 日 形式;當執行 Set
DateFormat DMY 之後,日期的格式為日 月有年 形式

(5)數字數據類型

數字數據只包含數字。數字數據類型包括正數和負數、小數(浮點數)和整數
整數由正整數和負整數組成,例如 39、25、0-2 和 33967。在
Micrsoft SQL Server 中,整數存儲的數據類型是 Int,Smallint和 Tinyint。

Int 數據類型存儲數據的范圍大於 Smallint 數據類型存儲數據的范圍,而 Smallint 據類型存儲數據的范圍大於Tinyint
數據類型存儲數據的范圍。

使用 Int 數據狗昔存儲數據的范圍是從 -2 147 483 648 到 2 147 483 647(每一個值要求4個位元組存儲空間)。

使用 Smallint 數據類型時,存儲數據的范圍從 -32 768 到 32 767(每一個值要求2個位元組存儲空間)。

使用Tinyint 數據類型時,存儲數據的范圍是從0 到255(每一個值要求1個位元組存儲空間)。
精確小婁數據在 SQL Server
中的數據類型是 Decimal 和 Numeric。這種數據所佔的存儲空間根據該數據的位數後的位數來確定。
在SQL Server
中,近似小數數據的數據類型是 Float 和
Real。例如,三分之一這個分數記作。3333333,當使用近似數據類型時能准確表示。因此,從系統中檢索到的數據可能與存儲在該列中數據不完全一樣。

(6)貨幣數據表示正的或者負的貨幣數量 。

在 Microsoft SQL Server 中,貨幣數據的數據類型是Money 和 Smallmoney
Money數據類型要求 8
個存儲位元組,Smallmoney 數據類型要求 4 個存儲位元組。

(7)特殊數據類型

特殊數據類型包括前面沒有提過的數據類型。特殊的數據類型有3種,即 Timestamp、Bit 和
Uniqueidentifier。
Timestamp 用於表示SQL Server 活動的先後順序,以二進投影的格式表示。Timestamp
數據與插入數據或者日期和時間沒有關系。
Bit 由 1 或者 0 組成。當表示真或者假、ON 或者 OFF 時,使用 Bit
數據類型。例如,詢問是否是每一次訪問的客戶機請求可以存儲在這種數據類型的列中。
Uniqueidentifier 由 16
位元組的十六進制數字組成,表示一個全局唯一的。當表的記錄行要求唯一時,GUID是非常有用。例如,在客戶標識號列使用這種數據類型可以區別不同的客戶。

2.用戶定義的數據類型

用戶定義的數據類型基於在 Microsoft SQL Server
中提供的數據類型。當幾個表中必須存儲同一種數據類型時,並且為保證這些列有相同的數據類型、長度和可空性時,可以使用用戶定義的數據類型。例如,可定義一種稱為
postal_code 的數據類型,它基於 Char
數據類型。
當創建用戶定義的數據類型時,必須提供三個數:數據類型的名稱、所基於的系統數據類型和數據類型的可空性。

(1)創建用戶定義的數據類型

創建用戶定義的數據類型可以使用 Transact-SQL 語句。系統存儲過程 sp_addtype
可以來創建用戶定義的數據類型。其語法形式如下:
sp_addtype
{type},[,system_data_bype][,'null_type']
其中,type
是用戶定義的數據類型的名稱。system_data_type 是系統提供的數據類型,例如 Decimal、Int、Char 等等。 null_type
表示該數據類型是如何處理空值的,必須使用單引號引起來,例如'NULL'、'NOT NULL'或者'NONULL'。
例子:
Use
cust
Exec sp_addtype ssn,'Varchar(11)',"Not Null'
創建一個用戶定義的數據類型
ssn,其基於的系統數據類型是變長為11 的字元,不允許空。
例子:
Use cust
Exec sp_addtype
birthday,datetime,'Null'
創建一個用戶定義的數據類型 birthday,其基於的系統數據類型是
DateTime,允許空。
例子:
Use master
Exec sp_addtype
telephone,'varchar(24),'Not Null'
Eexc sp_addtype
fax,'varchar(24)','Null'
創建兩個數據類型,即 telephone 和 fax

(2)刪除用戶定義的數據類型

當用戶定義的數據類型不需要時,可刪除。刪除用戶定義的數據類型的命令是 sp_droptype {'type'}。
例子:
Use
master
Exec sp_droptype
'ssn'
注意:當表中的列還正在使用用戶定義的數據類型時,或者在其上面還綁定有默認或者規則時,這種用戶定義的數據類型不能刪除。

SQL SERVER的欄位類型說明

以下為SQL SERVER7.0以上版本的欄位類型說明。SQL SERVER6.5的欄位類型說明請參考SQL SERVER提供的說明。

欄位類型 描述
bit 0或1的整型數字
int
從-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型數字
smallint
從-2^15(-32,768)到2^15(32,767)的整型數字
tinyint 從0到255的整型數字

decimal 從-10^38到10^38-1的定精度與有效位數的數字
numeric decimal的同義詞

money
從-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的貨幣數據,最小貨幣單位千分之十

smallmoney 從-214,748.3648到214,748.3647的貨幣數據,最小貨幣單位千分之十

float
從-1.79E+308到1.79E+308可變精度的數字
real 從-3.04E+38到3.04E+38可變精度的數字

datetime 從1753年1月1日到9999年12日31的日期和時間數據,最小時間單位為百分之三秒或3.33毫秒

smalldatetime 從1900年1月1日到2079年6月6日的日期和時間數據,最小時間單位為分鍾

timestamp 時間戳,一個資料庫寬度的唯一數字
uniqueidentifier 全球唯一標識符GUID

char 定長非Unicode的字元型數據,最大長度為8000
varchar 變長非Unicode的字元型數據,最大長度為8000

text 變長非Unicode的字元型數據,最大長度為2^31-1(2G)

nchar
定長Unicode的字元型數據,最大長度為8000
nvarchar 變長Unicode的字元型數據,最大長度為8000
ntext
變長Unicode的字元型數據,最大長度為2^31-1(2G)

binary 定長二進制數據,最大長度為8000

varbinary 變長二進制數據,最大長度為8000
image 變長二進制數據,最大長度為2^31-1(2G)

-------------------------------------
Bit
1位,值為0或1

Int
Integer
4位元組,值為-2^31~2^31-1
Smallint

2位元組,值為-2^15~2^15-1
Tinyint
1位元組,值為0~255
Decimal (p,s)

數字數據,固定精度為P,寬度為S
Numeric
Money

8位元組,存放貨幣類型,值為-2^63~2^63-1
Small money

4位元組,存放貨幣類型,值為-214748.3648~+214748.3647近似數值數據類型
Float (n)

N在1~24之間,4位元組,7位精度
N=1~7為real
N在25~53之間,8位元組,15位精度

=8~15為float
Datetime
8位元組,描述某天的日期和時刻,值的精確度為1/300秒

Smalldatetime
4位元組,描述某天的日期和時刻,精度為分鍾
Cursor
對游標的引用

Timestamp
8位元組,存放在資料庫內唯一的數據
Uniqueidentifier

16位元組,存放全局唯一標識(GUID)
Char (n)
非unicode字元串的固定長度,n=1~8000

Character (n)
Varchar (n)
可變長度,非unicode字元串n=1~8000

Char varying(n)
Text
伺服器代碼頁中可變長度非unicode數據。最大長度為2^31-1個字元

Nchar
固定長度unicode字元串n=1~4000
National character (n),

National char(n)
Nvarchar
固定長度unicode字元串n=1~4000
National
character varying(n)
Ntext
可變長度unicode數據,最大長度為2^30-1個字元

National text
Binary (n)
固定長度二進制數據,n在1~8000之間,存儲空間為n+4位元組

Varbinary (n)
可變長度二進制數據,n=1~8000
Binary varying (n)
Tmage

可變長度二進制數據,大小為0~2^31-1
注意:
1)
對於數值型數據類型,寬度(scale)是指存儲在小數點後的數字位數,而精度(precision)是指能存儲的包含小數點在內的所有數字位數。

2) money和small money的存儲寬度為4。
3) 時間戳列值在每一行更新時系統自動更新,時間戳列不能是關鍵字或關鍵字的一部分。

4)
唯一標識數據類型不能使用算術操作符(如+、-等),這種數據類型只能使用相等比較操作。Unicode是所有字元集的一致存儲數據的標准。它要使用兩倍於非Unicode數據存儲的存儲空間。

G. 在SQL中存儲過程的一般語法是什麼

1、 創建語法

createproc|procerepro_name

[{@參數數據類型}[=默認值][output],

{@參數數據類型}[=默認值][output],

....

]

as

SQL_statements

2、 創建不帶參數存儲過程

--創建存儲過程

if(exists(select*fromsys.objectswherename='proc_get_student'))

dropprocproc_get_student

go

createprocproc_get_student

as

select*fromstudent;

--調用、執行存儲過程

execproc_get_student;

3、 修改存儲過程

--修改存儲過程

alterprocproc_get_student

as

select*fromstudent;

4、 帶參存儲過程

--帶參存儲過程

if(object_id('proc_find_stu','P')isnotnull)

dropprocproc_find_stu

go

createprocproc_find_stu(@startIdint,@endIdint)

as

select*fromstudentwhereidbetween@startIdand@endId

go

execproc_find_stu2,4;

5、 帶通配符參數存儲過程

--帶通配符參數存儲過程

if(object_id('proc_findStudentByName','P')isnotnull)

dropprocproc_findStudentByName

go

createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')

as

select*fromstudentwherenamelike@nameandnamelike@nextName;

go

execproc_findStudentByName;execproc_findStudentByName'%o%','t%';

(7)sqlvarying擴展閱讀:

SQL存儲過程優點:

1、重復使用。存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。

2、減少網路流量。存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。

3、安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。

H. sql有哪些保留字

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 procere 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