質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • Visual Studio

    2103questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • SQL Server

    646questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

[SQL Server]AdventureWorksからデータが空のファイルを簡単に作りたい。

解決済

回答 2

投稿 ・編集

  • 評価
  • クリップ 0
  • VIEW 2,323

makiikeda1216

score 133

SQL Server 初心者です。

質問なのですが、

Visual StudioもしくはSQL Server Management Studio を使い、

公式で提供されているデータサンプル AdventureWorks.mdfから

テーブルのデータが空のmdfファイルを簡単に作成するにはどうすればよいでしょうか?

DELETE FROM テーブル名
GO

で削除することもできますがテーブルが多すぎて非効率ですし、
IDで連動しているテーブルは削除が面倒です。

他に良い方法はないでしょうか?

どなたかご教授ください
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

下記のSQLで全テーブルのデータ削除ができます。

EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'

こちらを参考にしました。
How do you truncate all tables in a database using TSQL?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/09/04 10:03

    mochaさん回答ありがとうございます!

    USE [AdventureWorks2012]
    EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'

    というコマンドを実行しました。
    その結果

    [エラー]
    FOREIGN KEY 制約でテーブル 'Production.ScrapReason' が参照されているので、このテーブルは切り捨てられません。

    [参考サイト]

    >>You cannot truncate tables which have foreign keys, so this will only work if th>>ere are no foreign key constraints between tables (or they have been disabled).
    Foreign Key 制約がある場合はどうやら削除できないらしいですOTL

    制約がある場合のコマンドも書いてありましたので
    exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    exec sp_MSforeachtable 'DELETE FROM ?'
    exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
    exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

    もやってみましたが
    [エラー]
    DELETE が失敗しました。次の SET オプションには不適切な設定 'QUOTED_IDENTIFIER' があります。SET オプションが、インデックス付きビュー、計算列のインデックス、フィルター選択されたインデックス、クエリ通知、XML データ型のメソッド、空間インデックスの操作 で使用するのに適切であることを確認してください。

    とでましたOTL

    参考の11番目くらいにあった
    スクリプトの生成による削除をみつけたので実行しました
    1.open up SQL Management Studio
    2.navigate to your database
    3.Right-click and select Tasks->Generate Scripts (pic 1)
    4.On the "choose Objects" screen, select the "select specific objects" option and check "tables" (pic 2)
    5.on the next screen, select "advanced" and then change the "Script DROP and CREATE" option to "Script DROP and CREATE" (pic 3)
    6.Choose to save script to a new editor window or a file and run as necessary.

    エラーメッセージが何個か表示されましたが
    データの中身が消えてました!
    とりあえずこれでデータ構造だけ取り出せるようです!
    ありがとうございます!

    ちなみにエラーメッセージはこんな感じでした
    メッセージ 3729、レベル 16、状態 1、行 3613
    DROP TABLE 'Production.ProductModelProductDescriptionCulture' できません。オブジェクト 'vProductAndDescription' によって参照されています。
    メッセージ 3729、レベル 16、状態 1、行 3619
    DROP TABLE 'Production.ProductModel' できません。オブジェクト 'vProductAndDescription' によって参照されています。
    メッセージ 3729、レベル 16、状態 1、行 3631
    DROP TABLE 'Production.ProductDescription' できません。オブジェクト 'vProductAndDescription' によって参照されています。
    メッセージ 3729、レベル 16、状態 1、行 3640
    DROP TABLE 'Production.Product' できません。オブジェクト 'vProductAndDescription' によって参照されています。
    メッセージ 3729、レベル 16、状態 1、行 3658
    DROP TABLE 'Person.StateProvince' できません。オブジェクト 'vStateProvinceCountryRegion' によって参照されています。
    メッセージ 3729、レベル 16、状態 1、行 3676
    DROP TABLE 'Person.CountryRegion' できません。オブジェクト 'vStateProvinceCountryRegion' によって参照されています。
    メッセージ 2714、レベル 16、状態 6、行 4021
    データベースに 'CountryRegion' という名前のオブジェクトが既に存在します。
    メッセージ 2714、レベル 16、状態 6、行 4139
    データベースに 'StateProvince' という名前のオブジェクトが既に存在します。
    メッセージ 2714、レベル 16、状態 6、行 4267
    データベースに 'Product' という名前のオブジェクトが既に存在します。
    メッセージ 2714、レベル 16、状態 6、行 4341
    データベースに 'ProductDescription' という名前のオブジェクトが既に存在します。
    メッセージ 2714、レベル 16、状態 6、行 4415
    データベースに 'ProductModel' という名前のオブジェクトが既に存在します。
    メッセージ 2714、レベル 16、状態 6、行 4451
    データベースに 'ProductModelProductDescriptionCulture' という名前のオブジェクトが既に存在します。

    キャンセル

  • 2014/09/04 10:12

    追記ですが

    上のエラーの出ているテーブルはデータがのこったままになっていました。
    ほかのテーブルは削除が成功していました。

    キャンセル

  • 2014/09/04 17:18

    >makiikeda1216 さん
    DELETE文のところを、
    EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON;Delete From ?'
    としたらどうでしょうか?

    なお、Vendorsテーブルはトリガで削除できないようになっているようです。

    キャンセル

  • 2014/09/05 09:14

    >mochaさん

    EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    EXEC sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON;Delete From ?'
    EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
    EXEC sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'

    としたところ、削除がすべてうまくいきました!
    ありがとうございます!

    キャンセル

0

新規のデータベースを作成し、サンプルのデータベースを削除すれば良いです。
逆でもOKですが、新規DB作成してからサンプルを削除した方が安全ですね。

作成手順のサイトです

削除はManagement Studioのデータベースフォルダ中のサンプルデータベースを右クリックして
メニューより削除できたはずです。



投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2014/09/04 09:15

    BlueMoonさん

    回答ありがとうございます!

    >>新規のデータベースを作成し、サンプルのデータベースを削除すれば良いです

    説明不足だったようですみません。作成手順のサイトもみさせていただいたのですが
    データ構造はそのまま残した空のデータベースを作成したいのです。

    SQL Server Management Studioでその作業をためしにおこなった途中で

    データベース右クリ→タスク→スクリプト生成

    という作業でデータ構造だけをスクリプト化する方法をみつけたのですが
    「これかな?」と思ったんですが、スキーマあたりでひっかかってしまったり
    して半分くらいのテーブルができなかったりしてうまくいきませんね。。

    キャンセル

  • 2014/09/04 10:03

    テーブル構造は残してということでしたね、失礼いたしました m(__)m
    ラフな手段ですが、テーブルリストをエディタに張り付けてtruncate文として整形して一括実行する方法しか思いつかないですね。参照制約でひっかかるのは主にマスター系なのでトランザクション系のテーブルから先に削除すれば良いかと思います。
    参照制約でエラーになった場合は、該当テーブルのtruncateを後にすれば良いと思います。

    キャンセル

  • 2014/09/04 10:26

    返信ありがとうございます!

    >>。参照制約でひっかかるのは主にマスター系なのでトランザクション系のテーブルから先に削除すれば良いかと思います。
    参照制約でエラーになった場合は、該当テーブルのtruncateを後にすれば良いと思います。

    なるほど!参照制約エラーの該当テーブルはtrucateの順番によって変わってくるんですね!
    試してみます!

    キャンセル

同じタグがついた質問を見る

  • Visual Studio

    2103questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • SQL Server

    646questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。