gpt4 book ai didi

SQL 删除所有限制 Azure 友好

转载 作者:行者123 更新时间:2023-12-04 04:04:51 28 4
gpt4 key购买 nike

我正在使用 Azure 数据库进行一些数据库管理,我需要执行查询,例如删除数据库中的所有约束。

sp_MSForEachTable 在使用 Azure 数据库时不可用,因此我正在采用不同的方法来实现此目的。

我发现了一个删除所有表的片段:http://edspencer.me.uk/2013/02/25/drop-all-tables-in-a-sql-server-database-azure-friendly/并尝试修改它以消除我需要的所有约束,并得出以下结果:

while(exists(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME != '__MigrationHistory'))
begin
PRINT ('Disabling' + TABLE_NAME)
declare @constraintOff nvarchar(2000)
SELECT TOP 1 @constraintOff=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] ' + 'NOCHECK CONSTRAINT all')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME != '__MigrationHistory'
exec (@constraintOff)
PRINT @constraintOff
end

它反复尝试对数据库中的第一个项目进行操作,如果您删除所有内容,这会很好地工作,但我需要像 sp_MSForEachTable 那样循环遍历每个表并禁用其约束。

有什么建议吗?我到处都看到过一些东西声称可以做到这一点,但它们通常是两到三页长的脚本,可以做很多其他事情,这让我很头疼。

更新

仍在处理该查询,似乎为此目的可能会更好,但仍然没有骰子:

declare @constraintOff nvarchar(2000)
SELECT @constraintOff=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] ' + 'NOCHECK CONSTRAINT all')
FROM INFORMATION_SCHEMA.TABLES
exec (@constraintOff)
PRINT @constraintOff

这个仍然只在一张表上操作,但至少它不是无限循环:)

最佳答案

虽然此链接适用于 Amazon RDS,但它确实提供了在没有 sp_MSForEachTable 的情况下禁用约束的特定代码

Importing and Exporting SQL Server Data

-- Manually specify database name - a safeguard in case you paste this into the wrong SSMS window.
USE [staging]

-- Change this line if you want to enable (1) or disable constraints:
DECLARE @enable_constraints bit = 0

--Don't change anything below this line.
DECLARE @schema_name SYSNAME
DECLARE @table_name SYSNAME

DECLARE table_cursor CURSOR FOR
SELECT
schemas.name,
tables.name
FROM
sys.tables
INNER JOIN sys.schemas ON tables.schema_id = schemas.schema_id

OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @schema_name, @table_name

DECLARE @cmd varchar(200)
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'ALTER TABLE ' + QUOTENAME(@schema_name) + '.' + QUOTENAME(@table_name) + ' '
SET @cmd = @cmd + (CASE WHEN @enable_constraints = 1 THEN 'CHECK' ELSE 'NOCHECK' END) + ' CONSTRAINT ALL'

PRINT @cmd
EXEC( @cmd )

FETCH NEXT FROM table_cursor INTO @schema_name, @table_name
END

CLOSE table_cursor
DEALLOCATE table_cursor

关于SQL 删除所有限制 Azure 友好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851302/

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