我是 MsSql 的新手,我不确定这是否可以完成,但我想在我想要继续当前流程之前我会问一下。
我需要创建一个脚本来循环访问数据库中的所有表并删除 CorporationId =“xxx”的行。有一些表没有此列,但在我的约 50 个表中,只有一两个没有。
我可以使用以下命令单独删除表中的记录:
USE MyDatabase
DECLARE @CorporationId UniqueIdentifier
DECLARE @TokenId UniqueIdentifier
DECLARE @CompanyCode nChar(3)
SET @CorporationId = '52D3AEFE-8EBD-4669-8096-4596FE83BB36'
print 'Starting Web.GasOrder'
DELETE FROM Web.GasOrder
WHERE CorporationId = @CorporationId
print 'Starting Web.GasOrderNumber'
DELETE FROM Web.GasOrderNumber
WHERE CorporationId = @CorporationId
etc..
但为每个表创建一个表会变得很乏味。
当然,有些表之间有关系。
有没有一种简单的方法可以做到这一点,或者我需要为每个表手动执行此操作?
UPDATE
我尝试过的大多数选项都会遇到关系问题并给我一个错误。
sp_MSForEachTable是一个未记录的存储过程,它将为数据库中的每个表运行命令:
USE MyDatabase
DECLARE @CorporationId VARCHAR(50)
SET @CorporationId = '52D3AEFE-8EBD-4669-8096-4596FE83BB36'
DECLARE @Sql VARCHAR(MAX)
SET @Sql = '
IF COL_LENGTH(''?'',''CorporationId'') IS NOT NULL
BEGIN
DELETE FROM Web.?
WHERE CorporationId = ''' + @CorporationId + '''
END
'
EXEC sp_MSForEachTable @Sql
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)