2

これらのテーブルがあると仮定しましょう

FooTable                     BarTable
id    value                  id    value

BarTableのミラーリングされたテーブルとして機能しており、FooTableある時点で から行全体のコピーを受け取ります。FooTable

今、私がこれを試したように:

Insert Into BarTable select * from FooTable where yadi yada

を使用するのは恐ろしく感じます*

これにアプローチする他の方法はありますか?

4

2 に答える 2

3
Insert Into BarTable
(id, value)
select
id, values
from FooTable
where yadi yada
于 2013-08-16T13:19:01.430 に答える
2

以下を参照してください。データを含む一時テーブルを作成し、すべてのデータを同一のテーブルに挿入します。

CREATE TABLE #TableOne ( field1 int, field2 int )
CREATE TABLE #TableTwo ( field1 int, field2 int )

INSERT INTO #TableOne ( Field1, Field2 ) VALUES ( 100, 200 )
INSERT INTO #TableOne ( Field1, Field2 ) VALUES ( 101, 201 )
INSERT INTO #TableOne ( Field1, Field2 ) VALUES ( 102, 201 )

INSERT INTO #TableTwo
SELECT * FROM #TableOne

-- If table that your loading data into has an Identity column you need to turn it off and you need 
-- to specificy each column
CREATE TABLE #TableThree ( field1 int IDENTITY(1,1), field2 int )
SET IDENTITY_INSERT #TableThree ON 

INSERT INTO #TableThree ( Field1, Field2 )
SELECT * FROM #TableOne

SET IDENTITY_INSERT #TableThree OFF

テーブルに大量のフィールドがあり、手動でスクリプトを作成したくない場合は、このコードを使用できます。

DECLARE @TableColumns AS VARCHAR(MAX)

SELECT @TableColumns = ISNULL(@TableColumns,'') + CASE WHEN @TableColumns IS NULL THEN '' ELSE ', ' END + '[' + C.Name + ']'
FROM SYS.Columns C
WHERE OBJECT_ID = OBJECT_ID('dbo.MyTable')

PRINT 'INSERT INTO NewTable ( ' + @TableColumns + ')'
PRINT 'SELECT ' + @TableColumns + ' FROM MyTable'
于 2013-08-16T13:35:31.413 に答える