❶ sql 中的數據類型有那些請講明白些
這個太多了,推薦你還是看看Sql Sever 2000的基礎教程
數據類型
在 Microsoft® SQL Server™ 中,每個列、局部變數、表達式和參數都有一個相關的數據類型,這是指定對象可持有的數據類型(整型、字元、money 等等)的特性。SQL Server 提供系統數據類型集,定義了可與 SQL Server 一起使用的所有數據類型。下面列出系統提供的數據類型集。
可以定義用戶定義的數據類型,其是系統提供的數據類型的別名。有關用戶定義的數據類型的更多信息,請參見 sp_addtype 和創建用戶定義的數據類型。
當兩個具有不同數據類型、排序規則、精度、小數位數或長度的表達式通過運算符進行組合時:
通過將數據類型的優先順序規則應用到輸入表達式的數據類型來確定所得值的數據類型。有關更多信息,請參見數據類型的優先順序。
如果結果數據類型為 char、varchar、text、nchar、nvarchar 或 ntext,則結果值的排序規則由排序規則的優先順序規則決定。有關更多信息,請參見排序規則的優先順序。
結果的精度、小數位數及長度取決於輸入表達式的精度、小數位數及長度。有關更多信息,請參見精度、小數位數和長度。
SQL Server 為 SQL-92 兼容性提供了數據類型同義詞。有關更多信息,請參見數據類型同義詞。
精確數字
整數
bigint
從 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 的整型數據(所有數字)。
int
從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數據(所有數字)。
smallint
從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數據。
tinyint
從 0 到 255 的整數數據。
bit
bit
1 或 0 的整數數據。
decimal 和 numeric
decimal
從 -10^38 +1 到 10^38 –1 的固定精度和小數位的數字數據。
numeric
功能上等同於 decimal。
money 和 smallmoney
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 到 -2.23E - 308,0 和 2.23E + 308 到 1.79E + 308。
real
浮點精度數字數據,有效值為:從 -3.40E + 38 到 -1.18E - 38,0 和 1.18E - 38 到 3.40E + 38。
datetime 和 smalldatetime
datetime
從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數據,精確到百分之三秒(或 3.33 毫秒)。
smalldatetime
從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間數據,精確到分鍾。
字元串
char
固定長度的非 Unicode 字元數據,最大長度為 8,000 個字元。
varchar
可變長度的非 Unicode 數據,最長為 8,000 個字元。
text
可變長度的非 Unicode 數據,最大長度為 2^31 - 1 (2,147,483,647) 個字元。
Unicode 字元串
nchar
固定長度的 Unicode 數據,最大長度為 4,000 個字元。
nvarchar
可變長度 Unicode 數據,其最大長度為 4,000 字元。sysname 是系統提供用戶定義的數據類型,在功能上等同於 nvarchar(128),用於引用資料庫對象名。
ntext
可變長度 Unicode 數據,其最大長度為 2^30 - 1 (1,073,741,823) 個字元。
二進制字元串
binary
固定長度的二進制數據,其最大長度為 8,000 個位元組。
varbinary
可變長度的二進制數據,其最大長度為 8,000 個位元組。
image
可變長度的二進制數據,其最大長度為 2^31 - 1 (2,147,483,647) 個位元組。
其它數據類型
cursor
游標的引用。
sql_variant
一種存儲 SQL Server 支持的各種數據類型(text、ntext、timestamp 和 sql_variant 除外)值的數據類型。
table
一種特殊的數據類型,存儲供以後處理的結果集。
timestamp
資料庫范圍的唯一數字,每次更新行時也進行更新。
uniqueidentifier
全局唯一標識符 (GUID)。
回答者:wfchenjin - 大魔法師 九級 3-10 17:48
--------------------------------------------------------------------------------
SQL SERVER的數據類型
數據類弄是數據的一種屬性,表示數據所表示信息的類型。任何一種計算機語言都定義了自己的數據類型。當然,不同的程序語言都具有不同的特點,所定義的數據類型的各類和名稱都或多或少有些不同。SQLServer 提供了 25 種數據類型:
·Binary [(n)]
·Varbinary [(n)]
·Char [(n)]
·Varchar[(n)]
·Nchar[(n)]
·Nvarchar[(n)]
·Datetime
·Smalldatetime
·Decimal[(p[,s])]
·Numeric[(p[,s])]
·Float[(n)]
·Real
·Int
·Smallint
·Tinyint
·Money
·Smallmoney
·Bit
·Cursor
·Sysname
·Timestamp
·Uniqueidentifier
·Text
·Image
·Ntext (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)
回答者:mgc - 經理 五級 3-10 17:53
--------------------------------------------------------------------------------
表1顯示了數字數據類型;表2顯示了字元數據類型;表3顯示了日期和布爾數據類型。
表1 scalar types:numeric
datatype range subtypes description
binary_integer -214748-2147483647 natural
natural
npositive
positiven
signtype
用於存儲單位元組整數。
要求存儲長度低於number值。
用於限制范圍的子類型(subtype):
natural:用於非負數
positive:只用於正數
naturaln:只用於非負數和非null值
positiven:只用於正數,不能用於null值
signtype:只有值:-1、0或1.
number 1.0e-130-9.99e125 dec
decimal
double
precision
float
integeric
int
numeric
real
smallint 存儲數字值,包括整數和浮點數。可以選擇精度和刻度方式,語法:
number[([,])]。
預設的精度是38,scale是0.
pls_integer -2147483647-2147483647 與binary_integer基本相同,但採用機器運算時,pls_integer提供更好的性能 。
表2 字元數據類型
datatype rang subtype description
char 最大長度32767位元組 character 存儲定長字元串,如果長度沒有確定,預設是1
long 最大長度2147483647位元組 存儲可變長度字元串
raw 最大長度32767位元組 用於存儲二進制數據和位元組字元串,當在兩個資料庫之間進行傳遞時,raw數據不在字元集之間進行轉換。
longraw 最大長度2147483647 與long數據類型相似,同樣他也不能在字元集之間進行轉換。
rowid 18個位元組 與資料庫rowid偽列類型相同,能夠存儲一個行標示符,可以將行標示符看作資料庫中每一行的唯一鍵值。
varchar2 最大長度32767位元組 stringvarchar 與varchar數據類型相似,存儲可變長度的字元串。聲明方法與varchar相同
表3 date和boolean
datatype range description
boolean true/false 存儲邏輯值true或false,無參數
date 01/01/4712 bc 存儲固定長的日期和時間值,日期值中包含時間
❷ sql中如何通過存儲過程返回結果集
引用
4
樓
oraclefans_
的回復:想麻煩了。。你直接返回遊標就是一個結果集合。。CREATE
OR
REPLACE
PROCEDURE
USP_RETN_VAL(
RETN_VAL_CUR
OUT
sys_refcursor)ISBEGIN
OPEN
RETN_VAL_CUR
FOR
SELECT
*
FROM
TBL1;END;調用declare
cur
sys_refcurso……謝謝
但是我是想執行一個存儲過程後,直接返回表裡所有數據,不要再去操作游標。
❸ SQL中數據類型有哪些
int 整型 int 數據類型可以存儲從- 231(-2147483648)到231 (2147483 647)之間的整數。存儲到資料庫的幾乎所有數值型的數據都可以用這種數據類型。這種數據類型在資料庫里佔用4個位元組
tinyint 整型 tinyint 數據類型能存儲從0到255 之間的整數。它在你只打算存儲有限數目的數值時很有用。 這種數據類型在資料庫中佔用1 個位元組
float 近似數值型 float 數據類型是一種近似數值類型,供浮點數使用。說浮點數是近似的,是因為在其范圍內不是所有的數都能精確表示。浮點數可以是從-1.79E+308到1.79E+308 之間的任意數
bit 整型 bit 數據類型是整型,其值只能是0、1或空值。這種數據類型用於存儲只有兩種可能值的數據,如Yes 或No、True 或Fa lse 、On 或Off
char 字元型 char數據類型用來存儲指定長度的定長非統一編碼型的數據。當定義一列為此類型時,你必須指定列長。當你總能知道要存儲的數據的長度時,此數據類型很有用。例如,當你按郵政編碼加4個字元格式來存儲數據時,你知道總要用到10個字元。此數據類型的列寬最大為8000 個字元
varchar 字元型 varchar數據類型,同char類型一樣,用來存儲非統一編碼型字元數據。與char 型不一樣,此數據類型為變長。當定義一列為該數據類型時,你要指定該列的最大長度。 它與char數據類型最大的區別是,存儲的長度不是列長,而是數據的長度
nchar 統一編碼字元型 nchar 數據類型用來存儲定長統一編碼字元型數據。統一編碼用雙位元組結構來存儲每個字元,而不是用單位元組(普通文本中的情況)。它允許大量的擴展字元。此數據類型能存儲4000種字元,使用的位元組空間上增加了一倍
nvarchar 統一編碼字元型 nvarchar 數據類型用作變長的統一編碼字元型數據。此數據類型能存儲4000種字元,使用的位元組空間增加了一倍
text 字元型 text 數據類型用來存儲大量的非統一編碼型字元數據。這種數據類型最多可以有231-1或20億個字元
datetime 日期時間型 datetime數據類型用來表示日期和時間。這種數據類型存儲從1753年1月1日到9999年12月3 1日間所有的日期和時間數據, 精確到三百分之一秒或3.33毫秒
Smalldatetime 日期時間型 smalldatetime 數據類型用來表示從1900年1月1日到2079年6月6日間的日期和時間,精確到一分鍾
image 二進制數據類型 image 數據類型用來存儲變長的二進制數據,最大可達231-1或大約20億位元組
基本查詢
select column1,columns2,...
from table_name
說明:把table_name 的特定欄位資料全部列出來
select *
from table_name
where column1 = ***
[and column2 > yyy] [or column3 <> zzz]
說明:
1.'*'表示全部的欄位都列出來。
2.where 之後是接條件式,把符合條件的資料列出來。
select column1,column2
from table_name
order by column2 [desc]
說明:order by 是指定以某個欄位做排序,[desc]是指從大到小排列,若沒有指明,則是從小到大
排列
組合查詢
組合查詢是指所查詢得資料來源並不只有單一的表格,而是聯合一個以上的
表格才能夠得到結果的。
select *
from table1,table2
where table1.colum1=table2.column1
說明:
1.查詢兩個表格中其中 column1 值相同的資料。
2.當然兩個表格相互比較的欄位,其資料形態必須相同。
3.一個復雜的查詢其動用到的表格可能會很多個。
整合性的查詢:
select count (*)
from table_name
where column_name = ***
說明:
查詢符合條件的資料共有幾筆。
select sum(column1)
from table_name
說明:
1.計算出總和,所選的欄位必須是可數的數字形態。
2.除此以外還有 avg() 是計算平均、max()、min()計算最大最小值的整合性查詢。
select column1,avg(column2)
from table_name
group by column1
having avg(column2) > ***
說明:
1.group by: 以column1 為一組計算 column2 的平均值必須和 avg、sum等整合性查詢的關鍵字
一起使用。
2.having : 必須和 group by 一起使用作為整合性的限制。
復合性的查詢
select *
from table_name1
where exists (
select *<BR>from table_name2
where conditions )
說明:
1.where 的 conditions 可以是另外一個的 query。
2.exists 在此是指存在與否。
select *
from table_name1
where column1 in (
select column1
from table_name2
where conditions )
說明:
1. in 後面接的是一個集合,表示column1 存在集合裡面。
2. select 出來的資料形態必須符合 column1。
其他查詢
select *
from table_name1
where column1 like 'x%'
說明:like 必須和後面的'x%' 相呼應表示以 x為開頭的字串。
select *
from table_name1
where column1 in ('***','yyy',..)
說明:in 後面接的是一個集合,表示column1 存在集合裡面。
select *
from table_name1
where column1 between xx and yy
說明:between 表示 column1 的值介於 xx 和 yy 之間。
3、更改資料:
update table_name
set column1='***'
where conditoins
說明:
1.更改某個欄位設定其值為'***'。
2.conditions 是所要符合的條件、若沒有 where 則整個 table 的那個欄位都會全部被更改。
4、刪除資料:
delete from table_name
where conditions
說明:刪除符合條件的資料。
說明:關於where條件後面如果包含有日期的比較,不同資料庫有不同的表達式。具體如下:
(1)如果是access資料庫,則為:where mydate>#2000-01-01#
(2)如果是oracle資料庫,則為:where mydate>cast('2000-01-01' as date)
或:where mydate>to_date('2000-01-01','yyyy-mm-dd')
在delphi中寫成:
thedate='2000-01-01';
query1.sql.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');
如果比較日期時間型,則為:
where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')
4、增加資料:
insert into table_name (column1,column2,...)
values ( value1,value2, ...)
說明:
1.若沒有指定column 系統則會按表格內的欄位順序填入資料。
2.欄位的資料形態和所填入的資料必須吻合。
3.table_name 也可以是景觀 view_name。
insert into table_name (column1,column2,...)
select columnx,columny,... from another_table
說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。
❹ SQL Server資料庫--表--新建表時的數據類型都是什麼意思啊
(1) 整數型
整數包括bigint、int、smallint和tinyint,從標識符的含義就可以看出,它們的表示數范圍逐漸縮小。
l bigint:大整數,數范圍為 -263 (-9223372036854775808)~263-1 (9223372036854775807) ,其精度為19,小數位數為0,長度為8位元組。
l int:整數,數范圍為 -231 (-2,147,483,648) ~231 - 1 (2,147,483,647) ,其精度為10,小數位數為0,長度為4位元組。
l smallint:短整數,數范圍為 -215 (-32768) ~215 - 1 (32767) ,其精度為5,小數位數為0,長度為2位元組。
l tinyint:微短整數,數范圍為 0~255,長度為1位元組,其精度為3,小數位數為0,長度為1位元組。
(2) 精確整數型
精確整數型數據由整數部分和小數部分構成,其所有的數字都是有效位,能夠以完整的精度存儲十進制數。精確整數型包括decimal 和 numeric兩類。從功能上說兩者完全等價,兩者的唯一區別在於decimal不能用於帶有identity關鍵字的列。
聲明精確整數型數據的格式是numeric | decimal(p[,s]),其中p為精度,s為小數位數,s的預設值為0。例如指定某列為精確整數型,精度為6,小數位數為3,即decimal(6,3),那麼若向某記錄的該列賦值56.342689時,該列實際存儲的是56.3427。
decimal和numeric可存儲從 -1038 +1 到 1038 –1 的固定精度和小數位的數字數據,它們的存儲長度隨精度變化而變化,最少為5位元組,最多為17位元組。
l 精度為1~9時,存儲位元組長度為5;
l 精度為10~19時,存儲位元組長度為9;
l 精度為20~28時,存儲位元組長度為13;
l 精度為29~38時,存儲位元組長度為17。
例如若有聲明numeric(8,3),則存儲該類型數據需5位元組,而若有聲明numeric(22,5),則存儲該類型數據需13位元組。
注意:聲明精確整數型數據時,其小數位數必須小於精度;在給精確整數型數據賦值時,必須使所賦數據的整數部分位數不大於列的整數部分的長度。
(3) 浮點型
浮點型也稱近似數值型。顧名思義,這種類型不能提供精確表示數據的精度,使用這種類型來存儲某些數值時,有可能會損失一些精度,所以它可用於處理取值范圍非常大且對精確度要求不是十分高的數值量,如一些統計量。
有兩種近似數值數據類型:float[(n)]和real,兩者通常都使用科學計數法表示數據,即形為:尾數E階數,如5.6432E20,-2.98E10,1.287659E-9等。
l real:使用4位元組存儲數據,表數范圍為-3.40E + 38 到 3.40E + 38,數據精度為7位有效數字。
l float:定義中的n取值范圍是1~53,用於指示其精度和存儲大小。當n在1~24之間時,實際上是定義了一個real型數據,存儲長度為4位元組,精度為7位有效數字;當n在25~53之間時,存儲長度為8位元組,精度為15位有效數字。當預設n時,代表n在25~53之間。float型數據的數范圍為- 1.79E+308 到 1.79E+308。
(4) 貨幣型
SQL Server提供了兩個專門用於處理貨幣的數據類型:money和smallmoney,它們用十進制數表示貨幣值。
l money:數據的數范圍為-263 (-922337203685477.5808)~263-1 (922337203685477.5807) ,其精度為19,小數位數為4,長度為8位元組。money的數的范圍與bigint相同,不同的只是money型有4位小數,實際上,money就是按照整數進行運算的,只是將小數點固定在末4位。
l smallmoney:數范圍為 –231 (-2,147,48.3648) ~231 - 1 (2,147,48.3647) ,其精度為10,小數位數為4,長度為4位元組。可見smallmoney與int的關系就如同money與bigint的關系。
當向表中插入money或smallmoney類型的值時,必須在數據前面加上貨幣表示符號($),並且數據中間不能有逗號(,);若貨幣值為負數,需要在符號$的後面加上負號(-)。例如:$15000.32,$680,$-20000.9088都是正確的貨幣數據表示形式。
(5) 位型
SQL Server中的位(bit)型數據相當於其他語言中的邏輯型數據,它只存儲0和1,長度為一個位元組。但要注意,SQL Server對表中bit類型列的存儲作了優化:如果一個表中有不多於 8 個的bit列,這些列將作為一個位元組存儲,如果表中有 9 到 16 個 bit 列,這些列將作為兩個位元組存儲,更多列的情況依此類推。
當為bit類型數據賦0時,其值為0,而賦非0(如100)時,其值為1。
若表中某列為bit類型數據,那麼該列不允許為空值(有關空值概念本節稍後即做介紹),並且不允許對其建立索引。
(6) 字元型
字元型數據用於存儲字元串,字元串中可包括字母、數字和其它特殊符號(如#、@、&等等)。在輸入字元串時,需將串中的符號用單引號或雙引號括起來,如』abc』、」Abc<Cde」。
SQL Server字元型包括兩類:固定長度 (char) 或可變長度 (varchar) 字元數據類型。
l char[(n)]
定長字元數據類型,其中n定義字元型數據的長度,n在1到8000之間,預設為1。當表中的列定義為char(n)類型時,若實際要存儲的串長度不足n時,則在串的尾部添加空格以達到長度n,所以char(n)的長度為n。例如某列的數據類型為char(20),而輸入的字元串為」ahjm1922」,則存儲的是字元ahjm1922和12個空格。若輸入的字元個數超出了n,則超出的部分被截斷。
l varchar[(n)]
變長字元數據類型,其中n的規定與定長字元型char中n完全相同,但這里n表示的是字元串可達到的最大長度。varchar(n)的長度為輸入的字元串的實際字元個數,而不一定是n。例如,表中某列的數據類型為varchar(100),而輸入的字元串為」ahjm1922」,則存儲的就是字元ahjm1922,其長度為8位元組。
當列中的字元數據值長度接近一致時,例如姓名,此時可使用 char;而當列中的數據值長度顯著不同時,使用varchar較為恰當,可以節省存儲空間。
(7) Unicode字元型
Unicode是「統一字元編碼標准」,用於支持國際上非英語語種的字元數據的存儲和處理。SQL Server的Unicode字元型可以存儲Unicode標准字元集定義的各種字元。
Unicode字元型包括nchar[(n)]和nvarchar[(n)]兩類。nchar是固定長度 Unicode 數據的數據類型,nvarchar 是可變長度 Unicode 數據的數據類型,二者均使用 UNICODE UCS-2 字元集。
l nchar[(n)]:nchar[(n)]為包含n個字元的固定長度 Unicode 字元型數據,n 的值在 1 與 4,000 之間,預設為1。長度為2n位元組。若輸入的字元串長度不足n,將以空白字元補足。
l nvarchar[(n)]:nvarchar[(n)]為最多包含n個字元的可變長度 Unicode 字元型數據,n 的值在 1 與 4,000之間,預設為1。長度是所輸入字元個數的兩倍。
實際上,nchar、nvarchar與char、varchar的使用非常相似,只是字元集不同(前者使用Unicode字元集,後者使用ASCII字元集)。
(8) 文本型
當需要存儲大量的字元數據,如較長的備注、日誌信息等等,字元型數據的最長8000個字元的限制可能使它們不能滿足這種應用需求,此時可使用文本型數據。
文本型包括text和ntext兩類,分別對應ASCII字元和Unicode字元。text類型可以表示最大長度為 231-1 (2,147,483,647) 個字元,其數據的存儲長度為實際字元數個位元組。ntext可表示最大長度為 230 - 1 (1,073,741,823) 個Unicode字元,其數據的存儲長度是實際字元個數的兩倍(以位元組為單位)。
(9) 二進制型
二進制數據類型表示的是位數據流,包括binary(固定長度)和varbinary(可變長度)兩種。
l binary [(n) ]:固定長度的n個位元組二進制數據。n取值范圍為 1 到 8,000,預設為1。binary(n)數據的存儲長度為 n+4 位元組。若輸入的數據長度小於n,則不足部分用0填充;若輸入的數據長度大於n,則多餘部分被截斷。
輸入二進制值時,在數據前面要加上0x,可以用的數字元號為0—9、A—F(字母大小寫均可)。因此,二進制數據有時也被稱為十六進制數據。例如0xFF、0x12A0分別表示值FF和12A0。因為每位元組的數最大為FF,故在「0x」格式的數據每兩位佔1個位元組。
l varbinary [(n) ]:n個位元組變長二進制數據。n取值范圍為 1 到 8,000,預設為1。varbinary(n)數據的存儲長度為實際輸入數據長度+4個位元組。
(10) 日期時間類型
日期時間類型數據用於存儲日期和時間信息,包括datetime和smalldatetime兩類。
l datetime:datetime類型可表示的日期范圍從 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和時間數據,精確度為百分之三秒(3.33 毫秒或 0.00333 秒),例如1到3毫秒的值都表示為0毫秒,4到6毫秒的值都表示為4毫秒。
datetime類型數據長度為8位元組,日期和時間分別使用4個位元組存儲。前4 位元組用於存儲datetime類型數據中距1900 年 1 月 1 日的天數,為正數表示日期在1900年1月1日之後,為負數則表示日期在1900年1月1日之前。後4個位元組用於存儲datetime類型數據中距12:00(24小時制)的毫秒數。
用戶以字元串形式輸入datetime類型數據,系統也以字元串形式輸出datetime類型數據,將用戶輸入到系統以及系統輸出的datetime類型數據的字元串形式稱為datetime類型數據的「外部形式」,而將datetime在系統內的存儲形式稱為「內部形式」,SQL Server負責datetime類型數據的兩種表現形式之間的轉換,包括合法性檢查。
用戶給出datetime類型數據值時,日期部分和時間部分分別給出。
日期部分的表示形式常用的格式如下:
年 月 日 2001 Jan 20、2001 Janary 20
年 日 月 2001 20 Jan
月 日[,]年 Jan 20 2001、Jan 20,2001、Jan 20,01
月 年 日 Jan 2001 20
日 月[,]年 20 Jan 2001、20 Jan,2001
日 年 月 20 2001 Jan
年(4位數) 2001表示2001年1月1日
年月日 20010120、010120
月/日/年 01/20/01、1/20/01、01/20/2001、1/20/2001
月-日-年 01-20-01、1-20-01、01-20-2001、1-20-2001
月.日.年 01.20.01、1.20.01、01.20.2001、1.20.2001
說明:年可用4位或2位表示,月和日可用1位或2位表示。
時間部分常用的表示格式如下:
時:分 10:20、08:05
時:分:秒 20:15:18、20:15:18.2
時:分:秒:毫秒 20:15:18:200
時:分AM|PM 10:10AM、10:10PM
l smalldatetime:smalldatetime類型數據可表示從 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和時間,數據精確到分鍾,即29.998 秒或更低的值向下舍入為最接近的分鍾,29.999 秒或更高的值向上舍入為最接近的分鍾。Smalldatetime類型數據的存儲長度為4位元組,前2個位元組用來存儲smalldatetime類型數據中日期部分距1900年1月1日之後的天數;後2個位元組用來存儲smalldatetime類型數據中時間部分距中午12點的分鍾數。
用戶輸入smalldatetime類型數據的格式與datetime類型數據完全相同,只是它們的內部存儲可能不相同。
(11) 時間戳型
標識符是timestamp。若創建表時定義一個列的數據類型為時間戳類型,那麼每當對該表加入新行或修改已有行時,都由系統自動將一個計數器值加到該列,即將原來的時間戳值加上一個增量。記錄timestamp列的值實際上反映了系統對該記錄修改的相對(相對於其他記錄)順序。一個表只能有一個timestamp 列。Timestamp類型數據的值實際上是二進制格式數據,其長度為8位元組。
(12) 圖象數據類型
標識符是image,它用於存儲圖片、照片等。實際存儲的是可變長度二進制數據,介於 0 與 231-1 (2,147,483,647) 位元組之間。
(13) 其它數據類型
除了上面所介紹的常用數據類型外,SQL Server 2000還提供了其它幾種數據類型:cursor、sql_variant、table和uniqueidentifier。
Cursor:是游標數據類型,用於創建游標變數或定義存儲過程的輸出參數。
Sql_variant:是一種存儲 SQL Server 支持的各種數據類型(除text、ntext、image、timestamp 和 sql_variant 外)值的數據類型。Sql_variant的最大長度可達 8016 位元組。
Table:是用於存儲結果集的數據類型,結果集可以供後續處理。
Uniqueidentifier:是唯一標識符類型。系統將為這種類型的數據產生唯一標識值,它是一個16位元組長的二進制數據。
❺ sql存儲過程與結果集
直接這么寫:
INSERT INTO TABLE1(field1,field2,...)
SELECT value1,value2,... from TABLE2 WHERE ...
存儲過程最後直接寫一個select 語句,外界就可以拿到這個結果集了,不需要用OUTPUT參數
❻ SQL中EXISTS怎麼用
EXISTS在SQL中的作用是:檢驗查詢是否返回數據。
select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,當 where 後面的條件成立,則列出數據,否則為空。
exists強調的是是否返回結果集,不要求知道返回什麼。比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
只要exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1
如果改成「select 2 from grade where ...」,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。
(6)sql結果集是什麼類型擴展閱讀:
Exists 方法描述如果在 Dictionary對象中指定的關鍵字存在,返回True,若不存在,返回False。
語法object.Exists(key)Exists 方法語法有如下幾部分:部分描述Object必需的。始終是一個 Dictionary對象的名字。Key必需的,在 Dictionary對象中搜索的Key值。
exist相當於存在量詞:表示集合存在,也就是集合不為空只作用一個集合.
例如 exist P表示P不空時為真; not exist P表示p為空時為真in表示一個標量和一元關系的關系。
例如:s in P表示當s與P中的某個值相等時為真; s not in P 表示s與P中的每一個值都不相等時為真。
exits與not exits
exists(sql 返回結果集為真)
not exists(sql 不返回結果集為真)
如果not exists子查詢只有自己本身的查詢條件,這樣只要子查詢中有數據返回,就證明是false,結果在整體執行就無返回值;一旦跟外面的查詢關聯上,就能准確查出數據。