sql serverで最初の1000行のデータを削除する方法の例
最近、sqlデータベース入門学習会の友人から「sqlを使ってテーブルから最初の1000行のデータを削除する方法が知りたいのですが、可能でしょうか?
オラクルのデータベース管理ソフトであれば、比較的簡単に導入できます
delete from table name where rownum<=1000;
データベース管理ソフトのsql serverはどうでしょうか?
sql serverにはrownum関数がないので、select topを使おうとしています。
最初のクエリは、結果セットを見るために、テーブル名から*を選択します。
delete from table name
where barcode
in (select top 10 barcodes from table name)
--注意事項 データ量に限りがあるため、最初の10行を削除するテストを実施
このように処理すると、何かが間違ってしまうのですが、なぜでしょうか?もし条件が , ならば、最初の10行の中のバーコード範囲しか削除できないので、そのバーコードのテーブルのすべてのレコードを誤って削除することになり、この方法はうまくいきません。
では、row_number()関数を使って、Oracleやsql serverのようにソートできるのでしょうか?
row_number()関数は、SELECT文が返す各行に1から順に番号を付け、連続した番号を与えます。
オーバーで使用する必要があります。
構文は以下の通りです。
<ブロッククオートselect *,ROW_NUMBER() over(order by productid) as num from product_test;
その文は以下の通りです。
select ROW_NUMBER() over (order by date) as num ,* from table name
出力は次のようになります。
上記のように、シリアル番号でソートされているので、最初の10行のデータを削除するのは簡単です。
delete from
(select ROW_NUMBER() over
(order by date) as num ,* from table name) tt
where tt.num<=10
結果は残念なもので、delete from はサブクエリを直接ネストすることができません。
(皆さん、ネストで処理する方法をご存知の方は、公開ハガキに返信してください)
最後に、これを処理するビューを作ることを考え、まず以下の文でソートされた状態のビューを作成しました。
create view view name1
as
select ROW_NUMBER() over (order by date) as num ,* from table name
go
ビューに問い合わせ、以下のように結果セットを出力します。
以下のステートメントで、ビューを通じて最初の10行のデータを削除します。
delete from view name 1 where num <=10;
条件を1000以下にして、テーブルの最初の1000行を削除する
概要を説明します。
1.オラクルのrownumはデータレコードのソートに挿入されますが、SQLサーバーは列でソートされ、それは間違ってデータを削除しないように、使用前に作成時間または発生時間でソートすることができるかどうかを確認することが推奨されます。
2は、テーブルのデータメソッドの最初の10行を削除することにより、ビューの理解を深めるために、ビューの変更は、直接ベーステーブルのデータに影響を与えます。
3、問題に対処するとき、それは結果を得るために文である必要はありません、あなたはビューまたは一時テーブルを作成することによって対処することができます、それはより良い動作するかもしれない、クエリのパフォーマンスに影響を与える可能性はありません。
まとめる
この記事は、SQL Serverは、データの最初の1000行を削除することについて、ここに導入され、より関連するsqlserverは、データの内容の最初の1000行を削除するスクリプト家の前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは将来的に多くのスクリプト家をサポートします願っています!.
関連
-
SQL Server 2019 データベースバックアップ&リストアスクリプト(一括バックアップ)
-
Spark SQL 2.4.8 データフレームを操作するための2つの方法
-
あるユーザーの連続ログイン日数を求めるSQLクエリ
-
Filestreamの簡単な使い方まとめ
-
リレーショナルデータベースと非リレーショナルデータベースの紹介
-
NavicatはSQL Serverのデータに接続します。エラー08001に対する完璧な解決策 - Named Pipeline Provider
-
SqlServerデータベースリモート接続ケースチュートリアル
-
SQLにアイドルCPU条件が定義されていないため、OnIdleジョブプランが機能しない
-
SQLサーバーのデータベースで、SAユーザーがロックされている問題を解決する
-
データベース毎日練習問題、毎日少しづつ進歩(1)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQLにおける3つの重複排除手法の概要
-
Windows環境でのSqlファイルの一括実行
-
SQL Server2017では、IPをサーバー名としてサーバーに接続します。
-
SQLSERVER 変数文字列を用いたスプライシング ケース詳細
-
SQL ServerのSELECT INTOとINSERT INTOのSELECTのケースを説明する
-
mybatis動的SQLの共通シナリオのまとめ
-
SQL文におけるJOINの利用シーンの分析
-
SQL SERVERのコミット・トランザクションのロールバック機構
-
SQLステートメントにおけるNULL値の扱い方
-
そのPHP環境の普遍的なパスワードのSQLインジェクションの脆弱性と防御手段