1.關於lob(large object)
2005後sql 引進了新的max說明符來支援lob。雖然這個版本的text,ntext,image繼續被支援著,因為前者的出現而不再推薦使用。
它還引入了xml資料型別,允許你儲存和處理xml資料。還允許使用bulk引擎高效地將檔案資料載入為行集。
max:
通過max說明符,儲存的值可以高達2gb 這是目前為止最大量的資料型別。
2005中統一了常規資料型別和lob型別的程式設計模型,所有支援常規型別的函式現在也支援由max說明符定義的資料型別。
update dbo.customerdata
set txt_data.write('one hundred and two', 9, 3)
where custid = 102;
--'one hundred and two' 是替換的目標值,9是替換的起始位置(從0開始,9就是第十個),3替換長度
write(a,b,c)
1.a為null 從b位置開始的字串截斷
2.b為null && c==0 把a直接新增到字串的末尾
3.c為null b之後的字串截斷,然後將a新增到字串末尾
另外:如果資料物件為null,write方法更新失效
bulk:
--建表
if object_id('dbo.shippers') is not null
drop table dbo.shippers;go
create table dbo.shippers
(shipperid int not null primary key,
companyname nvarchar(40) not null,
phone nvarchar(24) not null check(phone not like '%[^0-9() ]%')
);go
--利用openrowset函式返回值作為表
insert into dbo.shippers with (ignore_constraints)--目標表(ignore_constraints 插入時候無視約束)
select shipperid, companyname, phone
from openrowset(bulk 'c:/temp/shippers.txt',
formatfile = 'c:/temp/shippers.fmt') as s;
--這裡關於bulk的資料轉移不再多說 內容很多 日後整理出大量資料遷移的三種基本方法 bcp, insert bulk, openrowset(bulk...) 後續學習後整理。
2.隱式轉化
大家都知道當2個不同資料型別的資料進行計算的時候 首先低優先順序向高優先順序轉化,然後計算
附上資料型別優先順序表:
使用者定義資料型別(最高)
sql_variant
xml
datetime
smalldatetime
float
real
decimal
money
smallmoney
bigint
int
smallint
tinyint
bit
ntext
text
image
timestamp
uniqueidentifier
nvarchar(包括 nvarchar(max))
nchar
varchar (包括 varchar(max))
char
varbinary(包括 varbinary(max))
binary(最低)
這就是為什麼1+'1' =2 ,1. *col 結果為decimal型別了
下面說個由自動轉換引發的問題:
select
case
when 1 > 1 then 10
when 1 = 1 then 'abc'
when 1 < 1 then 10.
end;
-----錯誤:訊息 8114,級別 16,狀態 5,第 1 行
從資料型別 varchar 轉換為 numeric 時出錯。
為什麼會錯呢?從錯誤可以看出 本來預想的結果為『abc』 然後我們看'abc' 10 10. 資料型別分別為varchar,int,numeric 優先順序最高為
numeric ,所以結果也應該是numeric 『abc』無法轉成numeric 所以。。。。
解決方法有2個:
1.將結果表示式都轉化成通用的資料型別,比如varchar(100),但是這樣做的可能會出現比較,排序的時候的問題
2.將結果表示式都轉化成sql_variant
select
case
when 1 > 1 then cast(10 as sql_variant)
when 1 = 1 then cast('abc' as sql_variant)
when 1 < 1 then cast(10. as sql_variant)
end;
Redis個人學習筆記3 五大資料型別之字串
根據b站up主狂神說redis課程所寫的個人學習筆記 redis key 127.0.0.1 6379 keys 檢視所有的key empty array 127.0.0.1 6379 set name lin set key ok127.0.0.1 6379 keys 1 name 127.0.0...
Redis個人學習筆記3 五大資料型別之集合
根據b站up主狂神說redis課程所寫的個人學習筆記 set中的值是不能重複的 127.0.0.1 6379 sadd myset hello set集合中新增元素 integer 1 127.0.0.1 6379 sadd myset lin integer 1 127.0.0.1 6379 sa...
關於D3D的學習和個人理解 1
w 單字 wspeed dw 雙字 dwhitlist 命名規範 每個directx方法都會返回乙個 hresult 組織 以使其可以檢查並處理所有可能的錯誤。正題1.頂點 1.1內容 頂點即乙個3dworld中的點。頂點 vector與jme中的math包下 vector3f相同。分別為d3d9t...