タグ付けされた質問 「insert」

缶にそれを言うSQLのコアステートメント:データをテーブルに挿入します。

3
PostgreSQLの選択クエリからテーブルに値を挿入する方法は?
テーブルitems (item_id serial, name varchar(10), item_group int)とテーブルがありますitems_ver (id serial, item_id int, name varchar(10), item_group int)。 次に、items_verfromに行を挿入しitemsます。これを行うための短いSQL構文はありますか? 私は試しました: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2); しかし、構文エラーが発生します: ERROR: syntax error at or near "select" LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item... 私は今試しました: …
199 postgresql  insert 

3
外部キーを含む行を挿入するにはどうすればよいですか?
PostgreSQL v9.1を使用します。次の表があります。 CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); 最初のテーブルfooが次のように設定されているとします: INSERT INTO foo (type) …

2
どちらがより効率的ですか:リンクサーバーから選択するか、リンクサーバーに挿入しますか?
あるサーバーから別のサーバーに(リンクサーバー経由で)データをエクスポートする必要があるとします。どのステートメントがより効率的ですか? ソースサーバーでの実行: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() または、ターゲットサーバーで実行します。 INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') どちらがより速く、合計でより少ないリソースを消費しますか(ソースサーバーとターゲットサーバーの両方)。両方のサーバーはSQL Server 2005です。

4
特定のテーブルへの挿入が遅い理由を知るにはどうすればよいですか?
SQLテーブルでのINSERTには、さまざまな理由で時間がかかることがあります。 テーブル上のINSERT TRIGGERの存在 チェックする必要のある強制された制約の多く(通常は外部キー) テーブルの中央に行が挿入されると、クラスター化インデックスでページが分割される 関連するすべての非クラスター化インデックスを更新する テーブル上の他のアクティビティからのブロック 不十分なIO書き込み応答時間 ...私が見逃したものは何ですか? 特定のケースでどちらが責任があるのか​​をどのように確認できますか?ページ分割と非クラスター化インデックスの更新と他のすべての影響を測定するにはどうすればよいですか? (一時テーブルから)一度に約10,000行を挿入するストアドプロシージャがあり、1万行につき約90秒かかります。他のspidがタイムアウトするので、これは受け入れられないほど遅いです。 実行計画を確認しました。INSERTCLUSTERED INDEXタスクとFKルックアップからのすべてのINDEX SEEKSを確認しましたが、なぜ時間がかかるのか確かではありません。トリガーはありませんが、テーブルには少数のFKey(適切にインデックス付けされているように見える)があります。 これはSQL 2000データベースです。

3
クラスタ化インデックス付きのテーブルへの効率的なINSERT
TRACKING_NUMBER列にクラスター化インデックスが設定されたテーブルに行を挿入するSQLステートメントがあります。 例えば: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE 私の質問は-クラスター化インデックス列のSELECTステートメントでORDER BY句を使用するのに役立ちますか、またはORDER BY句に必要な追加の並べ替えによってゲインが無効になりますか?

2
多数の行を挿入する最速の方法は何ですか?
私はデータベースをステージングテーブルにロードします。このステージングテーブルから、外部キーを解決するために1-2回結合し、この行を最終テーブル(月ごとに1つのパーティションがある)に挿入します。3か月分のデータで約34億行あります。 これらの行をファイナルテーブルにステージングする最速の方法は何ですか?SSISデータフロータスク(ビューをソースとして使用し、高速ロードがアクティブになっている)またはInsert INTO SELECT ....コマンド?データフロータスクを試してみましたが、約5時間で約10億行(サーバー上の8コア/ 192 GB RAM)を得ることができ、非常に遅いと感じました。

1
サブクエリテーブルに関連付けられたOUTPUTで挿入
データベースの構造を変更しています。テーブルFinancialInstitutionのいくつかの列の内容は、テーブルPersonに転送する必要があります。FinancialInstitutionは、外部キーを持つPersonにリンクされています。各金融機関には、対応する個人のIDが必要です。そのため、Personに挿入された新しい行ごとに、この新しい行のID(IDENTITY)をFinancialInstitutionの対応する行にコピーする必要があります。 これを実行する明白な方法は、反復T-SQLコードです。しかし、セットベースの操作でのみ可能かどうかを知りたいと思っています。 そのようなリクエストの内部レベルは次のようなものになると想像しました。 INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1) OUTPUT inserted.Id, FinancialInstitution.Id SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email FROM FinancialInstitution; 残念ながら、OUTPUTはそのように相関できないようです...

4
テーブルの最大行数を1に制限する方法
SQL Serverデータベースに構成テーブルがあり、このテーブルには1行しかありません。将来の開発者がこれを理解できるように、複数行のデータが追加されないようにしたいと思います。以下のように、このためにトリガーを使用することを選択しました... ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERT AS BEGIN DECLARE @HasZeroRows BIT; SELECT @HasZeroRows = CASE WHEN COUNT (Id) = 0 THEN 1 ELSE 0 END FROM [dbo].[Configuration]; IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0 BEGIN RAISERROR ('You should not add more than one row …

1
INSERTのOUTPUT句の順序に依存しても安全ですか?
この表が与えられた場合: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); わずかに異なる2つのシナリオで、行を挿入し、ID列から値を返します。 シナリオ1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …


1
単一行のINSERT…SELECTは、個別のSELECTよりもはるかに遅い
1〜400の番号が付けられた400行の次のヒープテーブルがあるとします。 DROP TABLE IF EXISTS dbo.N; GO SELECT SV.number INTO dbo.N FROM master.dbo.spt_values AS SV WHERE SV.[type] = N'P' AND SV.number BETWEEN 1 AND 400; および次の設定: SET NOCOUNT ON; SET STATISTICS IO, TIME OFF; SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 次のSELECT文は約6秒で完了します(demo、plan): DECLARE @n integer = 400; …

2
挿入中にディスク容量がいっぱいになりました、どうなりますか?
今日、データベースを保存するハードドライブがいっぱいであることを発見しました。これは以前にも起こりましたが、通常、原因は非常に明白です。通常、不適切なクエリがあり、tempdbに大量の流出が発生し、ディスクがいっぱいになるまで増大します。今回は、tempdbがドライブ全体の原因ではなく、データベースそのものであるため、何が起こったのかが少しわかりにくくなりました。 事実: 通常のデータベースサイズは約55 GBでしたが、605 GBに増加しました。 ログファイルのサイズは標準で、データファイルは巨大です。 データファイルには85%の使用可能なスペースがあります(これを「空気」と解釈します:使用されたが、解放されたスペースです。SQLServerは、割り当てられるとすべてのスペースを予約します)。 tempdbのサイズは正常です。 考えられる原因を見つけました。あまりにも多くの行を選択するクエリが1つあります(不正な結合により、数十万が予想される110億行が選択されます)。これはSELECT INTOクエリであり、次のシナリオが発生したのではないかと思いました。 SELECT INTOが実行されます ターゲット表が作成されます データは選択されたとおりに挿入されます ディスクがいっぱいになり、挿入が失敗する SELECT INTOは中止され、ロールバックされます ロールバックは領域を解放します(既に挿入されたデータは削除されます)が、SQL Serverは解放された領域を解放しません。 ただし、この状況では、によって作成されたテーブルSELECT INTOがまだ存在することを期待していなかったため、ロールバックによって削除されるはずです。私はこれをテストしました: BEGIN TRANSACTION SELECT T.x INTO TMP.test FROM (VALUES(1))T(x) ROLLBACK SELECT * FROM TMP.test これは次の結果になります。 (1 row affected) Msg 208, Level 16, State 1, Line 8 Invalid object name 'TMP.test'. …

2
INSERTステートメントのOUTPUT INTO句でのソース列の使用(SQL Server)
私はバッチ処理の挿入ステートメントを書いていて、自分でアイテムをループして挿入された各行に対してSCOPE_IDENTITY()を呼び出す代わりに、一時テーブルを使用して挿入されたIDを追跡したいと考えています。 挿入する必要のあるデータには、(一時的な)IDが他のデータにリンクする(一時的な)IDがあるため、実際のIDと一時的なIDの相互参照が必要です。 これは私がこれまでに持っているものの例です: -- The existing table DECLARE @MyTable TABLE (ID INT IDENTITY(1,1), [Name] NVARCHAR(MAX)); -- My data I want to insert DECLARE @MyInsertData TABLE (ID INT, [Name] NVARCHAR(MAX)); INSERT INTO @MyInsertData ( ID,Name) VALUES ( -1 , 'bla'),(-2,'test'),(-3,'last'); DECLARE @MyCrossRef TABLE ([NewId] INT, OldId INT); INSERT INTO @MyTable ( …

1
INSERTでWITH TABLOCKを使用する利点
状況INSERT INTO <tablename> (WITH TABLOCK)によっては、ロギングが最小限であるため、実行が高速になります。これらの状況には、BULK_LOGGED復旧モデルにデータベースを含めることが含まれます。 データベース(tempdb)が復旧モデルを使用しているときに、空のテーブルで使用することWITH TABLOCKでパフォーマンス上の利点は他INSERTにありますか?SIMPLE SQL Server 2012 Standard Editionを使用しています。 私のユースケースは、を使用してストアドプロシージャ内に一時テーブルを作成し、すぐにデータを取り込むINSERT...SELECTことです。私はそのようなtempdbの乱用を避けようとしますが、時々必要になります。 私は必要なケースを構築しようとしていますTABLOCK。それは何も傷つけないようで、利益があるかもしれません。コードベースのどこにでもそれを追加するのに十分な潜在的な利点があるかどうかを把握しようとしています。テーブルに書き込みたい他のプロセスがないと確信しています。 通常、クラスター化されたPKで新しく作成されたローカル一時テーブルに挿入しますが、時々ヒープを使用します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.