53

SQL Server 2008 を使用していますが、データベースを削除して作成することができないようです。

私はいくつかの異なる方法を試しましたが、作成されたように見える前に、ドロップに失敗したり、「使用」しようとしたりすることが常にあります。

私の現在の試みは次のようになります。

use master;
GO
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'test')
BEGIN
DROP DATABASE [test];
END
GO
CREATE DATABASE [test];
GO
use [test];
GO

データベースのGO選択時に発生するいくつかの問題を停止する方法として、MS フォーラムで提案されました。

これにより、現在、次の出力(同じ名前の鉱石の既存のデータベースを使用)を取得しています。

メッセージ 3702、レベル 16、状態 4、行 3
現在使用中のため、データベース "test" を削除できません。
メッセージ 1801、レベル 16、状態 3、行 1
データベース 'test' は既に存在します。別のデータベース名を選択してください。
メッセージ 2714、レベル 16、状態 6、行 2
データベースには、'staff_type' という名前のオブジェクトが既に存在します。

データベース内のテーブルごとに最後の 2 行が繰り返されます。

4

14 に答える 14

75

通常、このデータベースに接続してクエリ ウィンドウを開いた場合、このエラーが発生します。そのため、削除しようとしている db に接続されている、開いているすべてのクエリ ウィンドウを必ず閉じてください。

削除しようとしているデータベースを使用しないでください。master を使用してユーザー データベースを削除することをお勧めします。

削除しようとしているデータベースに他のプロセスが接続されていないことを確認してください。

EXEC sp_who2
--Run kill spid for each process that is using the database to be dropped.
kill <<processid>> -- Kill 57

EXEC sp_who2DBName 列を使用して確認します。データベース名はリストに表示されません。表示された場合は、使用してプロセスを強制終了kill <<processid>>してからドロップしてみてください。

このコードを試してください。

use master
GO

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'test')
DROP DATABASE [test]
GO

CREATE DATABASE [test]
GO

use [test]
GO
于 2012-10-03T05:56:29.777 に答える
56
  1. データベースを右クリックして [削除]を選択します(または、左クリックして [del] キーを押します)。
  2. [オブジェクトの削除] ダイアログが表示されたら、 [既存の接続を閉じる] がオンになっていることを確認します(以下を参照してください。デフォルトではオフになっています)。
  3. 「OK」を押します。

ここに画像の説明を入力

于 2013-04-01T09:10:23.943 に答える
32

これを試して:

use master;
GO

ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

GO
.....

これにより、そのデータベースで実行されているすべてのトランザクションがロールバックされ、SQL Server データベースがシングル ユーザー モードになります。

于 2012-10-03T05:51:59.837 に答える
1

Master の使用中に上記のエラーが発生した場合。次に、SQL Server Management Studio完全に閉じてから再度開いて接続し、上記のクエリを実行する必要があります.....

うまくいくといいのですが.....

于 2012-10-03T05:50:39.043 に答える
1

プログラムで ADO.NET および を介してデータベースとやり取りした後にこれに遭遇しSqlConnection、使用後に各接続を確実に閉じており、そこに他に誰もいない場合は、接続プーリング。次の C# コードを試してmaster、別のデータベースに接続する前にプールをクリアして、データベースでコマンドを発行しDROP DATABASEてください。

SqlConnection.ClearPool(yourSqlConnectionObject);
于 2019-06-04T17:57:56.907 に答える
0

Sql Server Management Studio を使用しているときに、この種の問題に直面しました。何日にもわたるグーグル検索と実験の後、ようやく問題が見つかりました。

注意: 最初に、このテーブルのドロップおよび作成テーブル スクリプトを作成する必要があります。そうしないと、テーブルが作成されません。

1-最初に、対応する外部キーを持つテーブルのみを作成します。

2-これらのテーブルを使用してビジュアル ダイアグラムを作成します (Sql express-Databases-Databasename-DataBase Diagram-右クリックして、新しいデータベース ダイアグラムを選択します)。

3-ダイアグラムに必要なデータテーブルを追加し、テーブルの作成中に追加された対応する外部キーを使用して、これらのデータテーブル間の関係を作成します

4-その後、データベースを保存しました

データテーブルに特定のフィールドを追加するのを忘れた場合、データテーブルを簡単に削除して作成できます。これを行うには、次の手順に従います。

1-対応するデータベースのデータベース図を開きます

2-いくつかのフィールドを追加したい古いテーブルと他のテーブルの間に存在するすべての関係を削除します

3-次に、対応するテーブルをダイアグラムから削除します(テーブルを右クリックし、データテーブルからテーブルを削除を選択します)

4-ダイアグラムを保存します (Ctrl +S)

5-ドロップして作成するテーブルに移動します

6-テーブルを右クリックして選択します(スクリプトテーブルとして、ドロップを選択して作成し、新しいクエリエディターウィンドウに移動します)。これにより、テーブルが新しいテーブルにスクリプト化されます。この時点で、必要に応じて変更できます.新旧同じテーブル

古いテーブル

        USE [DatabaseName]
      GO

         /****** Object:  Table [dbo].[Administrateur]    Script Date:  10/11/2016 2:06:04 PM ******/
      DROP TABLE [dbo].[Administrateur]
     GO

      /****** Object:  Table [dbo].[Administrateur]    Script Date: 10/11/2016 2:06:04 PM ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

   CREATE TABLE [dbo].[Administrateur](
[AdministrateurID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Surname] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NOT NULL,
[Username] [nvarchar](max) NOT NULL,
[Password] [nvarchar](max) NOT NULL,
[Sexe] [nvarchar](max) NOT NULL,

 CONSTRAINT [PK_Administrateur] PRIMARY KEY CLUSTERED 
 (
[AdministrateurID] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =    OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 GO

3 つの新しいフィールド (メール、画像、ソルト) を備えた新しい同じテーブル

   USE [DatabaseName]
   GO

    /****** Object:  Table [dbo].[Administrateur]    Script Date: 10/11/2016 2:06:04 PM ******/
  DROP TABLE [dbo].[Administrateur]
  GO

   /****** Object:  Table [dbo].[Administrateur]    Script Date:    10/11/2016 2:06:04 PM ******/
  SET ANSI_NULLS ON
  GO

  SET QUOTED_IDENTIFIER ON
  GO

   CREATE TABLE [dbo].[Administrateur](
[AdministrateurID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Surname] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NOT NULL,
[Email] [nvarchar](max) NOT NULL,
[Username] [nvarchar](max) NOT NULL,
[Password] [nvarchar](max) NOT NULL,
[Image] [nvarchar](max) NOT NULL,
[Sexe] [nvarchar](max) NOT NULL,
[Salt] [nvarchar](max) NOT NULL,
 CONSTRAINT [PK_Administrateur] PRIMARY KEY CLUSTERED 
  (
   [AdministrateurID] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =    OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

次に、変更されたデータテーブルのページで、[実行] を押します。最初は実行されず、発生したエラーがいくつか書き込まれますが、気にせず、2 回目は [実行] を押してください。この時点で、実行され、ドキュメントの下部に成功メッセージが書き込まれます。次に、データベースを選択して [更新] をクリックします (または F5 キーを押します)。データベースのテーブルが一部のコンピューターで更新されるか、プログラムを再起動する必要があります。他のコンピューターで更新を見る前に (理由がわからないので、説明を求めないでください)。

ダイアグラムに戻り、更新されたテーブルを dd してから、これらの (この) テーブルを、それと関係のあるテーブルに接続します。

これが誰かの時間を節約することを願っています。

私はしない

于 2016-10-11T09:24:17.423 に答える
0

削除しようとしている DB に対して以前にクエリを実行した SQL ファイルが開いている場合、これらは削除を妨げます。上記のとおりです。私のためにこれらの解決済みの問題を閉じる

于 2014-06-10T14:37:43.923 に答える
0

このデータベースを使用しているすべてのクエリ ウィンドウを閉じる必要があります。また、SQL Server を完全に再起動する必要がある場合もあります。これで問題が解決する場合があります。

于 2013-12-11T06:22:20.647 に答える