【发布时间】:2018-12-01 19:20:08
【问题描述】:
我有一个名为Name_Tables 的表,其中包含其他表的名称。
其中一些表的名称类似于 dbo.companyname.test 和其他的 dbo.testtest。
对于表Name_Tables中提到的所有这些表,我想删除数据,这样我就有了空表。我想通过使用动态 SQL 来做到这一点。
我的代码是可执行的,我可以删除一些记录,但不是全部。也许你知道我的错误在哪里......
DECLARE @i INT = 1
DECLARE @count INT = 50
DECLARE @tablename NVARCHAR(MAX)
DECLARE @sql NVARCHAR(MAX)
DECLARE @value NVARCHAR (MAX)`
WHILE(@i <= @count)
BEGIN
SET @tablename = (SELECT TOP (1) Expression FROM Name_Tables WHERE Id = @i);
IF EXISTS (SELECT '[dbo].[company$'+@tablename+']')
BEGIN
SET @sql = N'DELETE FROM [dbo].[company$'+@tablename+']';
EXECUTE sp_executesql @sql;
END
ELSE IF EXISTS (SELECT '[dbo].[' + @tablename+']')
BEGIN
SET @sql = N'DELETE FROM [dbo].[' + @tablename+']';
EXECUTE sp_executesql @sql;
END
ELSE
BEGIN
SET @i += 1;
END
SET @i += 1
END
【问题讨论】:
-
有人会争辩说,您的根本问题是将相同的数据存储在不同的表中,仅以公司名称区分。您应该修复数据模型。
-
-
表之间是否有任何外键引用可能需要处理表的特定顺序,例如在删除他们的
Orders之前,您不能删除Customers?
标签: sql-server dynamic sql-delete sp-executesql