insert
あるデータベースのテーブルから同じサーバー上の別のデータベースにデータをコピーするステートメントがあります。
他のデータベースのテーブル名がわからないため、クエリを動的に生成する必要があります。このエラーがスローされるため、列TIMESTAMP
をINSERT
リストに含めることができないことを知っています。
タイムスタンプ列に明示的な値を挿入することはできません。列リストでINSERTを使用してタイムスタンプ列を除外するか、タイムスタンプ列にDEFAULTを挿入します。
このように、SQL Server 2008にはいくつのデータ型があるかを知る必要があります。データを挿入するときに、これらのデータ型を除外できます。
誰かが便利な情報を持っているなら、それは非常に役に立ちます。
私のマシン(SQL Server 2014)では、timestamp
への挿入のみが許可されていません。
:注意もありrowversion
これは、MSDNのの同義語としてリストtimestamp
、まだそれは表示されませんsys.types
。
明らかに、これが機能しない可能性のある他の機能があります(コメントで言及されているように)。 IDENTITY
長い答え:
自分で確認する方法は次のとおりです。
サポートされているすべてのタイプを列として持つテーブル作成スクリプトを生成します。
SELECT 'CREATE TABLE #Types( ' + STUFF(
( SELECT ', Type_' + name + ' ' + name
FROM sys.types
ORDER BY system_type_id
FOR XML PATH( '' )), 1, 1, '' ) + ' )'
次のようなものが得られます。
CREATE TABLE #Types( Type_image image, Type_text text, ..... )
挿入ステートメントと選択ステートメントを生成します。
SELECT 'INSERT INTO #Types( ' + STUFF(
( SELECT ', Type_' + name
FROM sys.types
ORDER BY system_type_id
FOR XML PATH( '' )), 1, 1, '' ) + ' )'
SELECT 'SELECT ' + STUFF(
( SELECT ', CONVERT( ' + name + ', '''' )'
FROM sys.types
ORDER BY system_type_id
FOR XML PATH( '' )), 1, 1, '' )
注:のためにSELECT
私たちは型に空の文字列を変換するほとんどの種類は「たとえば、」を成功するという事実を利用する- >変換(INT - > 0。
すべてのタイプで機能するわけではありませんが、いくつかあり、MSDNでタイプ情報(geographyなど)を検索してサンプル値を取得できます。
SQL Serverが挿入を拒否するデフォルト値と除外されたタイプを整理したら、別のテーブルを生成#Types2
して、#Types
テーブルから値を挿入できます。
完全なコード:
CREATE TABLE #Types( Type_image image, Type_text text, Type_uniqueidentifier uniqueidentifier, Type_date date, Type_time time, Type_datetime2 datetime2, Type_datetimeoffset datetimeoffset, Type_tinyint tinyint, Type_smallint smallint, Type_int int, Type_smalldatetime smalldatetime, Type_real real, Type_money money, Type_datetime datetime, Type_float float, Type_sql_variant sql_variant, Type_ntext ntext, Type_bit bit, Type_decimal decimal, Type_numeric numeric, Type_smallmoney smallmoney, Type_bigint bigint, Type_varbinary varbinary, Type_varchar varchar, Type_binary binary, Type_char char, Type_timestamp timestamp, Type_nvarchar nvarchar, Type_sysname sysname, Type_nchar nchar, Type_hierarchyid hierarchyid, Type_geometry geometry, Type_geography geography, Type_xml xml )
INSERT INTO #Types( Type_image, Type_text, Type_uniqueidentifier, Type_date, Type_time, Type_datetime2, Type_datetimeoffset, Type_tinyint, Type_smallint, Type_int, Type_smalldatetime, Type_real, Type_money, Type_datetime, Type_float, Type_sql_variant, Type_ntext, Type_bit, Type_decimal, Type_numeric, Type_smallmoney, Type_bigint, Type_varbinary, Type_varchar, Type_binary, Type_char, Type_nvarchar, Type_sysname, Type_nchar, Type_hierarchyid, Type_geometry, Type_geography, Type_xml )
SELECT CONVERT( image, '' ), CONVERT( text, '' ), CONVERT( uniqueidentifier, '0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong' ), CONVERT( date, '' ), CONVERT( time, '' ), CONVERT( datetime2, '' ), CONVERT( datetimeoffset, '' ), CONVERT( tinyint, '' ), CONVERT( smallint, '' ), CONVERT( int, '' ), CONVERT( smalldatetime, '' ), CONVERT( real, '' ), CONVERT( money, '' ), CONVERT( datetime, '' ), CONVERT( float, '' ), CONVERT( sql_variant, '' ), CONVERT( ntext, '' ), CONVERT( bit, '' ), CONVERT( decimal, '0' ), CONVERT( numeric, '0' ), CONVERT( smallmoney, '' ), CONVERT( bigint, '' ), CONVERT( varbinary, '' ), CONVERT( varchar, '' ), CONVERT( binary, '' ), CONVERT( char, '' ), CONVERT( nvarchar, '' ), CONVERT( sysname, '' ), CONVERT( nchar, '' ), CONVERT( hierarchyid, '/1/3/' ), geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0 ), geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326), CONVERT( xml, '' )
CREATE TABLE #Types2( Type_image image, Type_text text, Type_uniqueidentifier uniqueidentifier, Type_date date, Type_time time, Type_datetime2 datetime2, Type_datetimeoffset datetimeoffset, Type_tinyint tinyint, Type_smallint smallint, Type_int int, Type_smalldatetime smalldatetime, Type_real real, Type_money money, Type_datetime datetime, Type_float float, Type_sql_variant sql_variant, Type_ntext ntext, Type_bit bit, Type_decimal decimal, Type_numeric numeric, Type_smallmoney smallmoney, Type_bigint bigint, Type_varbinary varbinary, Type_varchar varchar, Type_binary binary, Type_char char, Type_nvarchar nvarchar, Type_sysname sysname, Type_nchar nchar, Type_hierarchyid hierarchyid, Type_geometry geometry, Type_geography geography, Type_xml xml )
INSERT INTO #Types2( Type_image, Type_text, Type_uniqueidentifier, Type_date, Type_time, Type_datetime2, Type_datetimeoffset, Type_tinyint, Type_smallint, Type_int, Type_smalldatetime, Type_real, Type_money, Type_datetime, Type_float, Type_sql_variant, Type_ntext, Type_bit, Type_decimal, Type_numeric, Type_smallmoney, Type_bigint, Type_varbinary, Type_varchar, Type_binary, Type_char, Type_nvarchar, Type_sysname, Type_nchar, Type_hierarchyid, Type_geometry, Type_geography, Type_xml )
SELECT Type_image, Type_text, Type_uniqueidentifier, Type_date, Type_time, Type_datetime2, Type_datetimeoffset, Type_tinyint, Type_smallint, Type_int, Type_smalldatetime, Type_real, Type_money, Type_datetime, Type_float, Type_sql_variant, Type_ntext, Type_bit, Type_decimal, Type_numeric, Type_smallmoney, Type_bigint, Type_varbinary, Type_varchar, Type_binary, Type_char, Type_nvarchar, Type_sysname, Type_nchar, Type_hierarchyid, Type_geometry, Type_geography, Type_xml
FROM #Types
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加