【问题标题】:C# Executing multiple SQL Statements and display result n GridViewC# 执行多个 SQL 语句并显示结果 n GridView
【发布时间】:2011-11-15 20:42:22
【问题描述】:

我正在使用 VS2005 和 SQL Server 2005。

我正在尝试在两个 sql 表上执行多个 sql 语句,这意味着我需要对这两个表进行不止一次检查。

这两个表是:

Table1用户 ID用户名

Table2用户 ID状态

以下是我需要执行的检查,但我不知道我需要的确切 SQL 查询是什么。

  1. 存在于Table1中的用户应该存在于Table2

  2. 存在的用户是 Table1 不应该在 Table2

  3. 中有 STATUS=DELETE
  4. Table2 中没有STATUS=DELETE 的用户应该存在于Table1

我可以知道如何将这个签入到 SQL 查询中并在我的 VS Sqldatasource 中执行它们吗?

之后将结果存储在一个变量中并在 GridView 表中显示。

非常感谢您的帮助。

【问题讨论】:

  • 您在寻找什么“结果”?你所有的检查都是布尔值
  • 我正在寻找不满足 3 次查询检查的“结果”,这意味着我正在寻找存在于 Table2 但不存在于 Table1 中的用户我>; Table1 中存在的用户在 Table2 中有“STATUS=DELETE”; Table2 中没有“STATUS=DELETE”的用户存在于 Table1 中。
  • @RUiHAO 一个UserID可以同时有多个状态吗?
  • @BrandonMoore 好点。我的默认假设是 userID 是 table2 中的 PK,但如果该假设错误,那么我的解决方案可能不准确。

标签: c# sql sql-server visual-studio


【解决方案1】:

所以你有 3 个案例要捕获:

  1. 用户存在于table1中但不存在于table2中
  2. 用户在 table2 中被标记为 DELETE 但仍存在于 table1 中
  3. 用户在 table2 中未标记为 DELETE,但在 table1 中不存在

下面的 WHERE 子句按顺序介绍了这三种情况。

SELECT *
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL)
OR (t2.status = 'DELETE' AND t1.userid IS NOT NULL)
OR (t2.userid IS NOT NULL AND t2.status <> 'DELETE' AND t1.userid IS NULL)

编辑:响应 OP 的评论,这是一个修改版本,它将根据案例 #1 将数据插入到table3。假设table3 是一个有两列的表,userIDproblem

INSERT INTO table3
SELECT userID, 'No Matching Table2 Record'
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL)

【讨论】:

  • 非常感谢,您的 sql 查询对我有用。我现在可以显示基于 3 个案例的结果。但是,如果我想将查询更改为: 对于每种情况,为找到的每个问题在单独的数据库中生成一个插入语句(因为我想为找到的每个问题添加一个列 'ISSUE',这样对用户更友好显示数据时)。如何更改一个,例如,第一个查询: SELECT * FROM table1 t1 FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL) 到 INSERT INTO而是声明?
【解决方案2】:

您想要joinUserID 上的表 1 和 2 并排除删除状态。然后在您的网格视图中使用结果。

select t1.UserID, t1.Username
from Table1 t1 
     join Table2 t2 on t1.UserID = t2.UserID
where t2.Status != 'DELETE'

【讨论】:

  • 这仅涵盖他的第三种情况(用户在table2中没有标记为'DELETE'但仍然存在于表1中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多