gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:34:44 26 4
gpt4 key购买 nike

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

有什么建议吗?

非常感谢

最佳答案

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

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

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

关于sql-server - 对所有数据库中的所有表运行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com