[轉載]SQL Server 中易混淆的數據類型
(1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的長度都在1到8000之間,它們的區別在於char是定長字符數據,而varchar是變長字符數據。所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;而變長字符數據則不會以空格填充。text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字符。
後面三種數據類型和前面的相比,從名稱上看只是多了個字母"n",它表示存儲的是Unicode數據類型的字符。寫過程序的朋友對Unicode應該很瞭解。字符中,英文字符只需要一個字節存儲就足夠了,但漢字眾多,需要兩個字節存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不兼容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較:nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。可以看出使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數量上有些損失。
(2)datetime和smalldatetime
datetime:從1753年1月1日到9999年12月31日的日期和時間數據,精確到百分之三秒。
smalldatetime:從1900年1月1日到2079年6月6日的日期和時間數據,精確到分鐘。
(3)bitint、int、smallint、tinyint和bit
bigint:從-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型數據。
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:1或0的整數數據。
(4)decimal和numeric
這兩種數據類型是等效的。都有兩個參數:p(精度)和s(小數位數)。p指定小數點左邊和右邊可以存儲的十進制數字的最大個數,p必須是從 1到38之間的值。s指定小數點右邊可以存儲的十進制數字的最大個數,s必須是從0到p之間的值,默認小數位數是0。
(5)float和real
float:從-1.79^308到1.79^308之間的浮點數字數據。
real:從-3.40^38到3.40^38之間的浮點數字數據。在SQL Server中,real的同義詞為float(24)。
flywang 發表在 痞客邦 留言(0) 人氣(272)
避免老年癡呆,趕快記下來。
declare @colname varchar(200)
SELECT @colname = STUFF(( SELECT
flywang 發表在 痞客邦 留言(0) 人氣(1,060)
今天同事問我一個問題,想了一下才找到答案。
需求:某個table中的某欄位資料如下,
d:\\Inetpub\\wwwroot\\download\\YHA.exe
d:\\Inetpub\\wwwroot\\download\\CCYYDD.doc
d:\\Inetpub\\wwwroot\\download\\h_yy_loag.exe
d:\\Inetpub\\wwwroot\\download\\set_up_qu.exe
結果:
YHA.exe
CCYYDD.doc
h_yy_loag.exe
set_up_qu.exe
我的作法如下..................
flywang 發表在 痞客邦 留言(0) 人氣(332)
資料內容欄位 a b c d e f資料 A B C 1 2 3 A B C 2 2 3 D E F 7 8 9 D E F 3 4 5結果 A B C 1 2 3 D E F 7 8 9SQL 如下,如果各位有想到更好的寫法,請告訴我。
flywang 發表在 痞客邦 留言(0) 人氣(781)
之前有提過用identity,這是網友提供之select語法,有用到sub-query。學生基本資料學號 姓名0001 ANY0002 BEN0003 FUN0009 SUNNY0008 DAVID
select (select count(*)+1 from 學生基本資料 where 學號< a.學號) as 序號,學號,姓名 from 學生基本資料 a
order by 1 |
flywang 發表在 痞客邦 留言(0) 人氣(3,904)
以下文章擷取至麟瑞科技黃俊傑先生所發表的(SQL SERVER2000預存程式簡介與實務應用)一文......何謂預存程序(STORE PROCEDRE),就是SQL STATEMENTS的集合,SQL SERVER將該集合中的STATEMENTS編譯成一個執行計畫,當預存程序第一次執行時,系統將經過編譯的執行計畫載入記憶體中,並且可重複使用,這樣SQL SERVER就不必每一次執行相同的任務就重複分析語法是否正確。
預存程序的優點,可從以下三方面來說明
1.效能
快取的執行計畫通常會讓預存程序在查詢上有較佳的性能,而此快取計畫可一直保持到SQL SERVER重新啟動前都能夠用,或直到它因為使用率太低而過時被釋出記憶體。預存程序可降低網路流量,設計良好的預存程序可以將用戶端和伺服器之間的多次往返減少為單一呼叫,因為預存程序是在SERVER端執行,通常CLIENT端只需輸入幾個參數,呼叫SERVER一次,就可完成工作,若不使用預存程序,CLIENT端可能需要呼叫SERVER多次才能完成工作,這樣CLIENT與SERVER間就必須不斷來回傳遞資料,增加網路流
2.可維護性和抽象化
在預存程序中進行變更使得更新完全不影響應用程式,這比起變更,測試和重新部署程式單元來得省時省力。透過將實作抽象化並保存於預存程序中,任何需要存取資料的應用程式就能以一致的方式來取得資料,無須在多個地方維護相同的程式碼,且使用者可取得一致的資訊。
3.安全性
管制使用者存取到資訊,透過預存程序上允許使用者權限而提供存取到特定的資料,而非在底層的資料表上。保護免於某些種類的SQL INJECTION。
flywang 發表在 痞客邦 留言(0) 人氣(3,400)
由於sql server沒有像oracle有rownum的函數可用,所以必須要使用identity這個屬性....select id = identity(int,1,1),Field1,Field2 into #TABLE FROM TABLE然後再SELECT * FROM #TABLE
flywang 發表在 痞客邦 留言(0) 人氣(271)
常會被問到表格內如果資料重複要怎麼刪除其中一筆.?以下是我的作法啦..如有更好的歡迎提供...
方法一:1.SELECT * INTO #TABLE1 FROM TABLE1
2.TRUNCATE TABLE TABLE1
3.INSERT INTO TABLE1 SELECT DISTINCT * FROM #TABLE1方法二:(巨匠講師:楊志強老師提供)
flywang 發表在 痞客邦 留言(0) 人氣(2,749)
運算加總的SUBQUERY用法....SELECT COUNT(CNT2),CNT
FROM
(SELECT COUNT(*) CNT,COUNT(*) CNT2, POLNO
FROM TB_ADDM
GROUP BY POLNO ) AS TABLE1
GROUP BY CNT
flywang 發表在 痞客邦 留言(0) 人氣(253)