質問がわかりにくい場合は申し訳ありませんが、正確に質問する方法がわかりませんでした。基本的に、私は20列と数百万行の巨大なテーブルを持っています。これらの行と列のサブセットを別のテーブルに挿入し、次にそれらの行ごとに、テーブルに新しい時刻と新しいGUIDを作成します。たとえば、次の表があるとします。
CREATE TABLE [dbo].[AddressData](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[AddressDataGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[City] [varchar](32) NOT NULL,
[State] [varchar](2) NOT NULL,
[DateModified] [datetime2](7) NOT NULL,
[TS] [timestamp] NOT NULL,
CONSTRAINT [PK_AddressData_ID] PRIMARY KEY CLUSTERED [ID]
これで、CityとStateを含む別のテーブルもありますが、Street、Zipなど、他の列もたくさんあります。大きなテーブルからCityとStateの個別のペアをすべて選択し、それらをに貼り付けます。新しいテーブルです。また、DateModifiedを現在の時刻に設定し、それらの個別のペアごとに新しいランダムGUIDを作成する必要があります。SQLServerでこれを行う方法がわかりません。私は次のようなことを試しました:
INSERT INTO Community (CommunityGUID, City, [State], DateModified)
VALUES (NEWID(), t.City, t.[State], SYSUTCDATETIME())
SELECT DISTINCT City, [State] FROM FullTable t
ただし、正しい構文がわかりません。おそらく、すべてのnull許容フィールドを含む一時テーブルを作成し、これら2つの列で個別に選択し、行ごとにループしてこれらの値をすべて作成し、最後に完全に構築されたテーブルを他のテーブルに選択することで、これを処理できます。 。それはデータベース開発者ではなくソフトウェア開発者としての私の最初の本能であるため、私はほとんどそれをやりたくなりますが、DB開発者は、1つのステートメントでそれを行う方法があれば、DBにそのようなものを置くことを嫌う傾向があります。 DBエンジンはそれを最適化します。
私はあなたがちょうどのための本当のクエリが欲しいと思いますINSERT
:
INSERT INTO Community (CommunityGUID, City, [State], DateModified)
SELECT NEWID(), t.City, t.[State], SYSUTCDATETIME()
FROM (SELECT DISTINCT City, [State]
FROM FullTable t
) t;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加