sql - 使用 gridview delete 命令从多个表中删除

标签 sql database sql-delete multiple-tables cascading-deletes

我有一个使用 sql 数据源的 GridView 。现在我想使用 GridView 的删除命令删除一条记录,问题是单个记录是基于从多个表收集的信息,所以我必须从所有这些表中删除部分信息才能完全删除记录,这是我的表结构。

  1. 项目
  2. 项目文章
  3. 文章状态
  4. 项目分配

Projects 是一个包含有关项目的完整信息的表,如项目名称、客户名称等,它有主键“project_id”

ProjectArticles 是一个表,其中包含有关与一个项目关联的文章数量的信息,例如,如果一个项目有 3 篇文章,则该表有 3 行,其中包含以下数据

article_id  project_id

1 --------- 1 
2 --------- 1 
3 --------- 1 

其中“article_id”是主键。

文章状态是一个表格,其中包含有关一篇文章的信息,例如

status_id- article_id- filename ---- writer_status- editor_status- sales_status

1 -------- 1 --------- Any filename -- done --------- pending ------ pending

"status_id"为主键

最后,ProjectAssignments 是一个表,其中包含有关将哪个项目分配给哪个作者的数据,它以 assignment_id 作为主键并使用 project_id 作为外键,与上图类似。

关于如何删除包含其他表中所有相关信息的完整项目的任何想法?

我做了这个示例查询,但它不起作用,sql management studio 说“无法解析查询文本”。

DELETE P, A FROM Projects AS P, ProjectArticles AS A WHERE P.project_id = A.project_id AND P.project_id = @project_id

在上面的查询文本中,我只使用了两个表来检查它是否有效但它不起作用,我们将不胜感激。

最佳答案

当您想删除与用作外键的特定主键相关的所有行时,级联很有用 在引用表中。

例如:- 主表或父表 Tab1(Id int (primary key) ,Name varchar(10)) 子表 Tab2(Class int, Id int (Tab1(Id)的refrential key,address varchar(10))

现在,当您想从记录中删除 1 个号码 ID 时,最好使用“ON DELETE CASCADE”,但是当您只想删除一个时 记录在子表中,则交易成功。

关于sql - 使用 gridview delete 命令从多个表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988859/

相关文章:

java - Java MySQL 连接器中的 DELETE 语句有任何已知问题吗?

php - 查询mysql出错

database - 挑战!!可以执行第五范式分解的有效第四范式关系示例

mysql - 删除带有空格的记录 - MySQL

SQL:语句触发器 VS 每行

php - 错误 : Not unique table/alias: 'companies' Database (error): 1066

python - 在 Django 中,如何找到违反唯一一起约束的行?

mysql - 如何在删除后触发器中更新表中的行

mysql - 使用左连接时不会删除行

java - 如何在 MySQL 表中添加 GENERATED BY DEFAULT AS IDENTITY?