SQL 查询从 table 中定义的 table 中删除数据
SQL Query to delete data from tables defined in table
我正在尝试从我的 SQL 基地中的多个 table 中删除数据。
在数据库中,我有一个名为 company 的 table,其中包含我需要从中删除数据的每个 table 的名称。
假设我的公司有 3 个公司 table。
我想做的是删除每个公司某些table中的所有记录。
所以,在公司table我有以下3条记录:
1 2 3
数据库中还有以下 table 描述了每个公司的扫描文档。
dbo.1.documents
dbo.2.documents
dbo.3.documents
我想做的是创建一个 SQL 查询,它将 运行 通过 dbo.company table 并清除文档 tables基于在那里找到的公司名称。
这是我的代码:
DECLARE @MyCursor CURSOR;
DECLARE @MyField varchar;
BEGIN
SET @MyCursor = CURSOR FOR
select top 1000 [Name] from dbo.Company
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
delete * from 'dbo.'+@MyField+'$documents'
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
我不确定语法应该如何,但我想应该是这样的。
有人关心我如何根据 dbo.company.name 中的记录动态删除数据吗?
使用动态 sql.
用下面的代码替换删除语句(声明可以在开始时完成):
DECLARE @sql NVARCHAR(1000)
SET @sql = N'delete from dbo.'+CONVERT(VARCHAR,@MyField)+'documents'
EXEC sp_executesql @sql
您可以稍微不同地利用动态 sql 并避免为此创建游标的所有麻烦和开销。我正在使用您的 table 中的值生成许多删除语句,然后执行它们。这大大减少了编码工作量并消除了讨厌的游标。
declare @SQL nvarchar(max) = ''
select @SQL = @SQL + 'delete dbo.[' + c.Name + '$documents];'
from dbo.Company
select @SQL --uncomment the line below when you are satisfied the dynamic sql is correct
--exec sp_executesql @sql
我正在尝试从我的 SQL 基地中的多个 table 中删除数据。
在数据库中,我有一个名为 company 的 table,其中包含我需要从中删除数据的每个 table 的名称。
假设我的公司有 3 个公司 table。
我想做的是删除每个公司某些table中的所有记录。
所以,在公司table我有以下3条记录:
1 2 3
数据库中还有以下 table 描述了每个公司的扫描文档。
dbo.1.documents
dbo.2.documents
dbo.3.documents
我想做的是创建一个 SQL 查询,它将 运行 通过 dbo.company table 并清除文档 tables基于在那里找到的公司名称。
这是我的代码:
DECLARE @MyCursor CURSOR;
DECLARE @MyField varchar;
BEGIN
SET @MyCursor = CURSOR FOR
select top 1000 [Name] from dbo.Company
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
delete * from 'dbo.'+@MyField+'$documents'
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
我不确定语法应该如何,但我想应该是这样的。
有人关心我如何根据 dbo.company.name 中的记录动态删除数据吗?
使用动态 sql.
用下面的代码替换删除语句(声明可以在开始时完成):
DECLARE @sql NVARCHAR(1000)
SET @sql = N'delete from dbo.'+CONVERT(VARCHAR,@MyField)+'documents'
EXEC sp_executesql @sql
您可以稍微不同地利用动态 sql 并避免为此创建游标的所有麻烦和开销。我正在使用您的 table 中的值生成许多删除语句,然后执行它们。这大大减少了编码工作量并消除了讨厌的游标。
declare @SQL nvarchar(max) = ''
select @SQL = @SQL + 'delete dbo.[' + c.Name + '$documents];'
from dbo.Company
select @SQL --uncomment the line below when you are satisfied the dynamic sql is correct
--exec sp_executesql @sql