在SQL 中插入資料時,提示不能將顯式值插入時間戳列請對列串列使用 INSERT 來排除時間戳列。是timestamp型別的問題,那么不能修改資料表中的結構怎么樣進行插入?其中per在資料庫中是timestamp型別,表示的是當前的時間。
sqlstr:='insert into'+' '+'vv_ova(id,pipenum,D_ova,X_ova,D_cir,X_cir,D_str,X_str,per) values(:s0,:s1,:s2,:s3,:s4,:s5,:s6,:s7,:s8)';
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Parameters.ParamByName('s0').Value:=trim(Edit1.Text);
ADOQuery1.Parameters.ParamByName('s1').Value:=trim(Edit2.Text);
ADOQuery1.Parameters.ParamByName('s2').Value:=trim(Edit3.Text);
ADOQuery1.Parameters.ParamByName('s3').Value:=trim(Edit4.Text);
ADOQuery1.Parameters.ParamByName('s4').Value:=trim(Edit5.Text);
ADOQuery1.Parameters.ParamByName('s5').Value:=trim(Edit6.Text);
ADOQuery1.Parameters.ParamByName('s6').Value:=trim(Edit7.Text);
ADOQuery1.Parameters.ParamByName('s7').Value:=trim(Edit8.Text);
ADOQuery1.Parameters.ParamByName('s8').Value:=trim(Edit9.Text);
提示為 sql不能將顯式值插入時間戳列。請對列串列使用 INSERT 來排除時間戳列,或將 DEFAULT 插入時間戳列。
uj5u.com熱心網友回復:
時間戳列 應該是不能賦值的吧, 這個是系統自動生成的, 插入時會自動生成, 更新時,也會跟著更新的.timestamp (Transact-SQL)
公開資料庫中自動生成的唯一二進制數字的資料型別。timestamp 通常用作給表行加版本戳的機制。 存盤大小為 8 個位元組。 timestamp 資料型別只是遞增的數字,不保留日期或時間。 若要記錄日期或時間,請使用 datetime 資料型別。
備注
每個資料庫都有一個計數器,當對資料庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。 該計數器是資料庫時間戳。 這可以跟蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。 一個表只能有一個 timestamp 列。 每次修改或插入包含 timestamp 列的行時,就會在 timestamp 列中插入增量資料庫時間戳值。 這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會更改 timestamp 值,從而更改鍵值。 如果該列屬于主鍵,那么舊的鍵值將無效,進而參考該舊值的外鍵也將不再有效。 如果該表在動態游標中參考,則所有更新均會更改游標中行的位置。 如果該列屬于索引鍵,則對資料行的所有更新還將導致索引更新。
使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以后是否發生了更改。 如果對行進行了更改,就會更新該時間戳值。 如果沒有對行進行更改,則該時間戳值將與以前讀取該行時的時間戳值一致。 若要回傳資料庫的當前時間戳值,請使用 @@DBTS。
Transact-SQL timestamp 資料型別不同于在 SQL-2003 標準中定義的 timestamp 資料型別。 SQL-2003 timestamp 資料型別等同于 Transact-SQL datetime 資料型別。
rowversion 的資料型別為 timestamp 資料型別的同義詞,并具有資料型別同義詞的行為。 在 DDL 陳述句,請盡量使用 rowversion 而不是 timestamp。 有關詳細資訊,請參閱 資料型別同義詞 (Transact-SQL)。
在 CREATE TABLE 或 ALTER TABLE 陳述句中,不必為 timestamp 資料型別指定列名,例如:
復制代碼
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);如果不指定列名,則 Microsoft SQL Server 2005 資料庫引擎將生成 timestamp 列名;但 rowversion 同義詞不具有這樣的行為。 在使用 rowversion 時,必須指定列名。
注意:
在使用其中的 SELECT 串列中具有 timestamp 列的 SELECT INTO 陳述句時,可能會生成重復的時間戳值。 建議不要以這種方式使用 timestamp。
不可為空的 timestamp 列在語意上等同于 binary(8) 列。 可為空的 timestamp 列在語意上等同于 varbinary(8) 列。
uj5u.com熱心網友回復:
一句話,時間戳列是由糸統生成或更新,它是標識該行資料產生更新的時間記號。你用不著去設定它。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81130.html
標籤:數據庫相關
上一篇:Delphi 資料庫操作
