【问题标题】:Run operations on all the tables in all the databases对所有数据库中的所有表运行操作
【发布时间】:2012-08-19 12:53:44
【问题描述】:

我正在尝试创建一个 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 新手,我不知道如何修复此脚本。

有什么建议吗?

非常感谢

【问题讨论】:

    标签: sql-server sp-msforeachdb


    【解决方案1】:

    这是开始的解决方案。它不会很快,但它会循环服务器上所有数据库的所有表。在第二个光标内,您可以决定如何处理表格。

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      相关资源
      最近更新 更多