Sybase的timestamp型別
今天有同事問我一個建表時候的錯誤:
1> create table aabbccddee( a timestamp,b timestamp)
2> go
Msg 2738, Level 16, State 2:
Server 'ipnet', Line 1:
A table can only have one timestamp column. Since table 'aabbccddee' already
has one, you can't add the column 'b'.
不能建2個時間型別?咋可能呢,上網查了一下
Sybase資料庫中的timestamp為使用者定義資料型別,它實際為varbinary(8)型別,但很多工程師把它當作date或time型別,這是錯誤的。其實在Sybase資料庫中每一個資料庫都會有一個全域性timestamp,它被存放在dbtable記憶體結構中,它是一個順序號,用於跟蹤資料庫中資料頁的修改情況,主要被系統使用進行自身維護工作。使用者不可以直接修改處理這種資料型別的資料,但使用DB-Library程式設計可以處理,特殊使用者一般使用該資料型別來代替identity型別資料,需要注意的是,這個值只可以增大,不可以減小。
做了下測試:
1> create table test1(id int,times timestamp,times2 datetime)
2> go
1> insert into test1 values(1,null,getdate())
2> go
(1 row affected)
1> select * from test1
2> go
id times times2
----------- ------------------ --------------------------
1 0x0000000000faefd1 Jul 10 2007 3:43PM
(1 row affected)
1> insert into test1 values(2,0x11111,getdate())
2> go
Warning: A non-null value cannot be inserted into a TIMESTAMP column by the
user. The database timestamp value has been inserted into the TIMESTAMP field
instead.
(1 row affected)
1> insert into test1 values(2,getdate())
2> go
Warning: A non-null value cannot be inserted into a TIMESTAMP column by the
user. The database timestamp value has been inserted into the TIMESTAMP field
instead.
Msg 213, Level 16, State 4:
Server 'ipnet', Line 1:
Insert error: column name or number of supplied values does not match table
definition.
1> create table test11(id int,id2 int identity)
2> go
1> insert into test11 values (null,1)
2> go
Msg 7743, Level 16, State 1:
Server 'ipnet', Line 1:
An explicit value for the identity field in table 'test11' can only be specified
in an insert statement when a field list is used.
1> insert into test11 values (2,1)
2> go
Msg 7743, Level 16, State 1:
Server 'ipnet', Line 1:
An explicit value for the identity field in table 'test11' can only be specified
in an insert statement when a field list is used.
1> insert into test11 values (1)
2> go
(1 row affected)
1> select * from test11
2> go
id id2
----------- -----------
1 1
(1 row affected)
總結下: identity和timestamp用起來差不多,區別在於
(1) identity 的列,不能出現在insert語句中,而timestamp必須出現,而且必須為null。
(2)identity的值,是在表一級唯一,timestamp的值是在資料庫一級唯一。
(3)identity的型別可以自己指定,timestamp不可以。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133835/viewspace-925766/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sybase datetime型別對映為Oracle timestamp型別Oracle
- oracle的timestamp型別使用Oracle型別
- TIMESTAMP型別的時區型別
- Oracle中的TIMESTAMP型別Oracle型別
- 輸入TIMESTAMP型別型別
- Timestamp型別淺析型別
- 將timestamp型別轉換為date型別型別
- mysql 資料型別TIMESTAMPMySQL 資料型別
- date、timestamp欄位型別型別
- Sqlserver:timestamp資料型別SQLServer資料型別
- ORACLE TIMESTAMP資料型別Oracle資料型別
- timestamp資料型別求差資料型別
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- timestamp型別的加減運算型別
- timestamp with local time zone型別和timestamp with time zone型別
- ORACLE DATE型別和TIMESTAMP型別DUMP換算Oracle型別
- Toad 與 timestamp 型別的問題?型別
- 關於timestamp資料型別資料型別
- MySQL 的 timestamp 和 datetime 型別比較MySql型別
- date和timestamp型別之間的轉換型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- oracle資料型別date和timestamp的轉化Oracle資料型別
- 將TIMESTAMP型別的差值轉化為秒的方法型別
- Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)型別的比較MySql型別
- MySQL資料庫中的timestamp型別與時區MySql資料庫型別
- (轉)PLS_INTEGER型別與timestamp型別、date、及時間函式型別函式
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- C#插入Oracle中Timestamp型別資料C#Oracle型別
- ORACLE DATE和TIMESTAMP資料型別的比較(一) (轉)Oracle資料型別
- ORACLE DATE和TIMESTAMP資料型別的比較(二) (轉)Oracle資料型別
- oracle timestamp轉換date及date型別相減Oracle型別
- mysql 5.1.43 開始,對timestamp 型別的分割槽有所改變MySql型別
- v$sql_bind_capture與timestamp型別的繫結變數的數值SQLAPT型別變數
- 如何在運算過程中保留timestamp型別資料的毫秒精度?型別
- 使用mysqldump 匯出 含有timestamp型別的表,應注意--skip-tz-utcMySql型別
- Oracle timestamp型別轉換date格式指令碼(精確到秒)Oracle型別指令碼
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- Oracle中Date和Timestamp的區別Oracle