2

もともと「tblXYZ123-」というプレフィックスが付いた名前のデータベース テーブルの大きなグループがあります。これにより、関連するテーブルがグループ化されたままになるため、テーブルにプレフィックスを付けたいのですが、プレフィックスを「td」などのより単純で関連性の高いプレフィックスに置き換えて、このグループのテーブルの名前を変更したいと考えています。

各ファイルの名前を手動で変更せずにテーブルの名前を変更するにはどうすればよいですか? スクリプトか何かを望んでいますが、そのようなツールを見つけることができませんでした。

4

2 に答える 2

2

このスクリプトは、動的SQLとカタログビューを使用して作成できますsys.tables

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += CHAR(13) + CHAR(10) 
  + 'EXEC sp_rename N''' + SCHEMA_NAME([schema_id])
  + '.' + name + ''', N''' + REPLACE(name, 'tblXYZ123-', 'td')
  + ''',N''OBJECT'';'
FROM sys.tables
WHERE name LIKE 'tblXYZ123-%';

PRINT @sql;
-- EXEC sp_executesql @sql;

必要に応じてカーソルを使用することもできますが、私は上記の方が好きです。スクリプトを実行する前に、スクリプトを印刷してプレビューできます。たとえば、次のようになります。

DECLARE @t SYSNAME, @f NVARCHAR(511);

DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
  FOR SELECT name, SCHEMA_NAME(schema_id) + '.' + name
    FROM sys.tables WHERE name LIKE 'tblXYZ123-%';

OPEN c;

FETCH NEXT FROM c INTO @t, @f;

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @t = REPLACE(@t, 'tblXYZ123-', 'td');

    EXEC sp_rename @f, @t, N'OBJECT';

    FETCH NEXT FROM c INTO @t, @f;
END 

CLOSE c;
DEALLOCATE c;
于 2012-06-06T13:53:06.537 に答える
0

私の意見では、最も簡単な方法は、テーブルのリストを Excel の列に配置することです。次の列に、おそらく新しい名前の="td"&mid(A1, 11, 1000)のような式を使用して、新しい名前を入力します。3 番目の列に、「sp_rename "&A1&" "&A2.

数式を下にコピーし、3 番目の列を SQL Server Management Studio にコピーして、コードを実行します。

これは、T-SQL でカーソルまたはループを使用して行うこともできます。ただし、Excel でそのようなコードを生成する (1 回限りのアプリケーションの場合) のが、通常は最速の方法であることがわかりました。

于 2012-06-06T13:55:42.497 に答える