0

各サーバーからテーブルを削除しようとしています。サーバー 1 には 3 つのデータベースがあり、サーバー 2 には 6 つ、サーバー 3 には 8 つのデータベースがあります。

以下は、特定のサーバーの各データベースからドロップ操作を実行するために作成した SQL スクリプトです。これらの操作を実行した後。

DECLARE
   @LoopId     int,
   @Command    varchar(500),
   @tblName varchar(100)

DECLARE @List TABLE
(
   TableName  sysname  not null,
   LoopId     int      not null  identity(1,1)
)

--  Load with tables you wish to drop

INSERT @List (TableName)

SELECT name FROM [Morgage].sys.objects WHERE type = 'u' and name like '%JKL%'
SELECT name FROM [Scorecard].sys.objects WHERE type = 'u'and name like '%JKL%'
SELECT name FROM [Core].sys.objects WHERE type = 'u' and name like '%JKL%'

SET @LoopId = @@rowcount

--  Go through list and process each item
WHILE @LoopId > 0

BEGIN

SET @tblName = (SELECT TableName from @List where LoopId = @LoopId)    
SET @Command = 'Drop table ' + @tblName

execute (@Command)

SET @LoopId = @LoopId - 1
END

上記のクエリ結果には、影響を受ける行が示されていますが、テストしようとすると、以下のクエリを使用しています。私はすべてを見ます。私のクエリは実際に何をしましたか? 私はそれを正しくやっていますか?

SELECT name FROM [Scorecard].sys.objects WHERE type = 'u'and name like '%JKL%'

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

このバージョンのスクリプトを試してください:-

DECLARE
   @LoopId     int,
   @Command    varchar(500),
   @tblName varchar(100),
   @dbName sysname


DECLARE @List TABLE
(
   DBName sysname not null,
   TableName  sysname  not null,
   LoopId     int      not null  identity(1,1)
)

--  Load with tables you wish to drop

INSERT @List (DBName, TableName)

SELECT 'Morgage',name FROM [Morgage].sys.objects WHERE type = 'u' and name like '%JKL%'
UNION
SELECT 'Scorecard',name FROM [Scorecard].sys.objects WHERE type = 'u'and name like '%JKL%'
UNION
SELECT 'Core',name FROM [Core].sys.objects WHERE type = 'u' and name like '%JKL%'

SET @LoopId = @@rowcount

--  Go through list and process each item
WHILE @LoopId > 0

BEGIN

SELECT @tblName = TableName, @dbName=DBName from @List where LoopId = @LoopId

SET @Command = 'USE ' + @dbName + ';if not exists(select 1 from sys.foreign_keys where parent_object_id=object_id(''' + @tblName + ''',''U'')' + char(10) + 'Drop table ' + @tblName + ';'

execute (@Command)

SET @LoopId = @LoopId - 1
END
于 2013-03-11T00:17:05.713 に答える
0

デフォルトでは、クエリがコミットされていない可能性があります。明示的に指定してみてください

于 2013-03-11T00:04:01.667 に答える