2

Microsoft.SqlServer.Management.Smo.SqlDataType列挙型にはタイプの値がありますが、ではありtimestampませんrowversion。アセンブリの更新バージョンまたはそれをサポートする代替列挙型を探しています。

既存の列挙型にはの値がありますが、ドキュメントTimestampよると、「非推奨であり、将来のバージョンで削除される予定です」。非推奨のものの使用は避けたいです:)rowversiontimestamp

4

2 に答える 2

5

素早い回答:

いいえ、別のタイプを使用する必要はありません。Microsoft.SqlServer.Management.Smo.SqlDataTypedatatypeは、使用するのに適したタイプです。古いスタイルの名前にもかかわらず、Microsoft.SqlServer.Management.Smo.SqlDataType.TimestampはタイプがSQLServer列に対してSMOによって返される値ですrowversion

非推奨になっているのは、SQLSeverDDLステートメントでのタイプ名「timestamp」の使用です。コードがタイプ名を含むDDLステートメントを生成timestampし、それらをSQL Serverに送信している場合は、[rowversion][4]代わりに使用するようにコードを変更する必要があります。ただし、SMOまたはそのタイプを使用するタイプのいずれかを使用している場合はMicrosoft.SqlServer.Management.Smo.SqlDataType、サーバー側での名前の変更による影響を受けません。

長い答え:

車輪の再発明を避けるために、ここでいくつかの引用符を組み合わせます。まず、http ://www.mssqltips.com/tip.asp?tip = 1501からのいくつかの履歴:

このデータ型[ROWVERSION]は、最終的にタイムスタンプデータ型を置き換えるためにSQLServer2000で導入されました。ANSI-SQL定義では、タイムスタンプは日付と時刻として定義されていますが、Microsoftは、行が変更されるたびに変更されるバイナリ値としてタイムスタンプを実装しました。Microsoftは、タイムスタンプの使用は最終的にANSI規格に準拠するように変更されるため、同時実行管理での使用は避ける必要があると警告しています。現在、タイムスタンプと行バージョンはどちらも互いに類似しています...

OracleとPostgresはどちらも標準に準拠した方法でTIMESTAMPを使用するため、Microsoftは、SQL Serverでの作業を困難にすることを避けるために、タイムスタンプの非標準的な使用をやめるのが賢明です。

とにかく、からtimestampへの変更rowversionは名前だけです。そのタイプを使用する列の動作には影響しません。次のMSDNドキュメントによるとrowversion

タイムスタンプはrowversionデータ型の同義語であり、データ型の同義語の動作の影響を受けます。DDLステートメントでは、可能な限りタイムスタンプの代わりにrowversionを使用してください。詳細については、「データ型の同義語(Transact-SQL)」を参照してください。

データ型同義語のドキュメントを掘り下げる場合:

元のオブジェクトと派生オブジェクトで実行される後続のすべてのメタデータ関数は、シノニムではなく、基本データ型を報告します。この動作は、sp_helpやその他のシステムストアドプロシージャ、情報スキーマビュー、またはテーブルや結果セットの列のデータ型を報告するさまざまなデータアクセスAPIメタデータ操作などのメタデータ操作で発生します。

つまり、SMOがテーブルに関するメタデータを取得するまでに、SMOは行バージョンについてのみ認識します。これは、rowversion型の列を持つテーブルが次のようにSMOに返されることを意味します。Microsoft.SqlServer.Management.Smo.SqlDataType.Timestamp

SMO APIは、SQLServerで使用される新しい名前に追いつくことはありませんでした。ただし、タイプの基本的な動作は変更されておらず、名前のみが変更されているため、SMOクライアントコードを変更する必要はありません。

コードがSQLServerデータ型を表示している場合は、善良な市民であり、そのコードを「タイムスタンプ」ではなく「行バージョン」を表示するように変更できます。ただし、それ以外の場合は、コードをまったく変更する必要はありません。実際、ほとんどのSMOクライアント(Visual Studioのテーブルデザインツールを含む!)は、新しい名前を反映するためにUIを変更することすらしませんでした。これらのUIは内部で列挙型に接続するため、SMO APIクライアントは、SQL ServerがDDLでタイプを呼び出すかどうかに関係なく、引き続き機能します。

SMO APIの将来のリビジョンでもMicrosoft.SqlServer.Management.Smo.SqlDataType.RowVersion、同じ基になる数値を持つ同義の値(たとえば)が列挙型に追加される可能性がありますが、既存のクライアントが壊れていないことを考えると、これはおそらくそれらの優先度が低くなります。

于 2010-03-17T09:00:35.647 に答える
1

SqlDataType.Timestamp非推奨であることを示すものが見つかりません。提供するリンクは、の「timestamp構文」rowversionがT-SQLで非推奨であり、rowversion代わりに使用する必要があることを示していますが、正しい構文が製品に実装されていることを確認するのはライブラリのメンテナ次第です。タイムスタンプ構文が将来のバージョンで実際に削除されることになった場合、ライブラリが更新され、Timestamp列挙値はそれを使用するコードとの下位互換性が維持されると確信しています。RowVersionそれらは列挙値を提供しないので、私は単にを使用しますTimestamp

于 2010-03-16T23:20:54.630 に答える