gpt4 book ai didi

c# - 产品生命周期的 SQL Server View 创建

转载 作者:行者123 更新时间:2023-11-30 22:36:20 25 4
gpt4 key购买 nike

[免责声明]:目前我们运行的是较旧的 SQL Server 2000,但我们可以在接下来的 6 个月左右更新到 SQL Server 2008。

在我们的制造环境中,我有一段很长的 C# 代码来确定以下内容:

  1. “拥有”产品的员工(定义为第一位使用该产品的员工)

  2. 该产品在压力测试站的最终Test_Result是什么,以及

  3. 该产品的第一个Test_Result真空测试 站是什么。

所有 Test_Result 值(存储在字符串值中)都包含在从旧 Microsoft Excel 电子表格演变而来的平面文件表中。数据库结构不容易被修改,因为公司机器和供应商机器都向它们写入数据。

大约一个月一次,管理层会运行一份报告来显示每个员工拥有多少产品,第一次压力测试是否成功,以及最终 < strong>真空测试成功。

目前,我执行此操作的技术全部在 C# 代码的 SQL 调用中:

  • SELECT DISTINCT Serial_Number WHERE Date_Time BETWEEN @Date1 AND @Date2

在一个月的时间里,我们可以在任何地方记录 1500 到 3500 个不同的产品 Serial_Number 值。

对于每个 Serial_Number,我创建了一个自定义 Product 类的实例,其中包含一个 PressureEmployee 和一个 VacuumEmployee,均初始化为 NULL

  • 现在,对于这些 Product 实例中的每一个,我选择所有数据并按 Date_Time 字段排序以确定哪个员工首先对产品执行测试操作。

此 SQL 类似于以下准代码:

string sqlText = "SELECT Date_Time, Employee, System_ID, Test_Result " +
"FROM Production " +
"WHERE Serial_Number=@SN ORDER BY Date_Time";
using (SqlCommand cmd = new SqlCommand(sqlText, new SqlConnection(connStr))) {
cmd.Parameters.Add("@SN", SqlDbType.NVarChar, 20);
cmd.Connection.Open();
foreach (var item in productList) {
cmd.Parameters["@SN"].Value = item;
SqlDataReader r = cmd.ExecuteReader();
while (r.Read()) {
string systemId = r["System_ID"].ToString();
string testResult = r["Test_Result"].ToString();
if (-1 < systemId.IndexOf("pressure")) {
if (String.IsNullOrEmpty(item.PressureEmployee)) {
item.PressureEmployee = r["Employee"].ToString();
}
// check that product ever passes
if (-1 < testResult.IndexOf("pass")) {
item.VacuumPass = true;
}
}
if ((-1 < systemId.IndexOf("vacuum")) &&
String.IsNullOrEmpty(item.VacuumEmployee)) {
item.VacuumEmployee = r["Employee"].ToString();
// product passes 1st time
item.VacuumPass = (-1 < testResult.IndexOf("pass"));
}
}
}
}

这实际上还有很多内容,但它应该能传达总体思路。

我想做的是创建一个可以驻留在服务器上的 View ,该 View 仅包含每个 Serial_Number 的列表、Pressure_Test 结果、Pressure_Test 日期、Vacuum_Test 结果和 Vacuum_Test 日期。

如果我的想法是正确的,这将减少服务器上的工作,因为它会始终保持此 View 。此外, View 应该执行得更快......对吧?

那么,我将如何编写这样的 View ?

如果不是更快,有没有办法在查询运行时获取查询的状态?显示 Cursor = Cursors.WaitCursor 40 分钟并没有让我对应用程序充满信心。

最佳答案

不是真的 - 默认情况下, View 不是由 SQL Server 维护 - View 只是将合并到您的查询中的 SQL 语句片段。这里没有性能提升.....

您可以研究索引 View ,它们确实是“维护的”,因为它们的数据值存储在磁盘上——就像一个表。

他们有一长串的要求和限制 list ——但如果你符合这些要求和限制,这可能会快得多——代价是使用更多的磁盘空间。你在这里也没有免费的午餐......

关于c# - 产品生命周期的 SQL Server View 创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com