このリンクのMS http://msdn.Microsoft.com/en-us/library/ms182776.aspx は、タイムスタンプではなくrowversionデータ型を使用する必要があると述べました。 SQL Server 2008 R2内でRowversionデータ型の列を作成したいのですが、SQL Server 2008 R2 Management Studio内ではそのようなデータ型を見つけることができません。
また、次のステートメントを使用して、タイムスタンプタイプのタイムスタンプという名前の既存の列を変更しようとしたときも同様です。
ALTER TABLE [SkillManagement].[dbo].[Customer]
ALTER COLUMN timestamp rowversion
私はこのエラーを受け取ります:
Msg 4927, Level 16, State 1, Line 1
Cannot alter column 'timestamp' to be data type timestamp
誰かアドバイスできますか?
[〜#〜]編集[〜#〜]
rowversion
はtimestamp
の単なるエイリアスです。カバーの下では、それらはまったく同じものです。
GUIを使用している場合(2012より前)、timestamp
を使用する必要があります。 (周辺のヒント:GUIの使用を中止してください。)
しかし、それだけではありません。 DDLを使用してこのテーブルを生成した場合でも、
CREATE TABLE dbo.x(y ROWVERSION);
メタデータのデータ型はtimestamp
になります:
SELECT t.name
FROM sys.types AS t
INNER JOIN sys.columns AS c
ON c.system_type_id = t.system_type_id
INNER JOIN sys.tables AS st
ON c.[object_id] = st.[object_id]
INNER JOIN sys.schemas AS s
ON st.[schema_id] = s.[schema_id]
WHERE st.name = N'x'
AND s.name = N'dbo'
AND c.name = N'y';
このテーブルのスクリプトを生成すると、timestamp
も含まれます。
CREATE TABLE [dbo].[x](
[y] [timestamp] NOT NULL
) ON [PRIMARY]
そして実際には:
SELECT * FROM sys.types WHERE name = N'rowversion';
結果:
----
0 row(s) affected.
そのため、システムにはrowversion
という名前のタイプさえありません。それを含むすべてのDDLは、DDLがbeforeの前に解析および変換されます。サーバーに対しても実行されます。
Microsoftは、名前の付いていないデータ型を最初に導入して以来、これについて歩み寄った矛盾になっています(これは、SQL標準に違反しているため、日付/時刻データにtimestamp
データ型を使用する必要があることを示しています)。 2007年に、これが適切に廃止されるようにお願いしました。 マイコネクトアイテムはまだアクティブです( アーカイブ )-自由に投票してください。 、ドキュメントが製品の可能な使用法とどのように矛盾するかについてコメントします。
タイムスタンプは、rowversionデータ型の同義語です。
これは [〜#〜] msdn [〜#〜] の記事にあります。
上記の記事で確認できるように、Microsoftはタイムスタンプに非推奨のマークを付けていますが、SQL Server 2012では、Rowversionデータ型でテーブルを作成した場合でも、Mgmt Studioはタイムスタンプを使用します。