Sql server 对所有数据库中的所有表运行操作

Sql server 对所有数据库中的所有表运行操作,sql-server,sp-msforeachdb,Sql Server,Sp Msforeachdb,我正在尝试创建一个SQL Server脚本,将一些操作应用于所有数据库中的所有表。我需要重命名一些表,如果某些条件得到遵守,则截断这些表 这是我的剧本 EXEC sp_MSforeachdb @command1 = ' IF not exists(select 1 where ''?'' in (''master'',''model'',''msdb'',''tempdb'')) EXEC [?].dbo.sp_MSforeachtable @command1 = '' IF(substring

我正在尝试创建一个SQL Server脚本,将一些操作应用于所有数据库中的所有表。我需要重命名一些表,如果某些条件得到遵守,则截断这些表

这是我的剧本

EXEC sp_MSforeachdb
@command1 = '
IF not exists(select 1 where ''?'' in (''master'',''model'',''msdb'',''tempdb''))
EXEC [?].dbo.sp_MSforeachtable
@command1 = ''
IF(substring(&, 1, 3)=pv_ and right(&, 5) != _data and right(&, 4) != _BCK)
       exec sp_RENAME & , &_BCK''
ELSE IF (right(&, 4) != _BCK)
       TRUNCATE  TABLE &
@replacechar = ''&'''
我有一些错误,但我是SQL Server新手,不知道如何修复此脚本

有什么建议吗


非常感谢

这里有一个start解决方案。它不会很快,但会循环服务器上所有数据库的所有表。在第二个光标内,您可以欺骗如何处理该表

(查询没有优化,只是一个快速解决方案)

DECLARE @DBName NVARCHAR(50)
DECLARE @TableName NVARCHAR(100)
DECLARE @DynamicSQL NVARCHAR(300)

DECLARE @DBCursor CURSOR
SET @DBCursor = CURSOR FOR
 SELECT NAME FROM SYS.DATABASES
 WHERE NAME NOT IN ('master','tempdb','model','msdb')

OPEN @DBCursor
FETCH NEXT FROM @DBCursor INTO @DBName

WHILE @@FETCH_STATUS = 0
 BEGIN

 CREATE TABLE #TempTableDatas
 (
 name varchar(100),
 objectID int
 )

  SET @DynamicSQL = 'INSERT INTO #TempTableDatas
  SELECT name, object_id FROM [' + @DBName + ']' + '.sys.Tables '
  EXEC SP_EXECUTESQL @DynamicSQL

    DECLARE @TableCursor CURSOR
    SET @TableCursor = CURSOR FOR
     SELECT name FROM #TempTableDatas

      OPEN @TableCursor
      FETCH NEXT FROM @TableCursor INTO @TableName
      WHILE @@FETCH_STATUS = 0
      BEGIN

        SELECT @TableName, @DBName

       FETCH NEXT FROM @TableCursor INTO @TableName
      END

    CLOSE @TableCursor
    DEALLOCATE @TableCursor 
    DROP TABLE #TempTableDatas
  FETCH NEXT FROM @DBCursor INTO @DBName
 END

CLOSE @DBCursor
DEALLOCATE @DBCursor