我正在尝试清理一个巨大的现有SQL脚本,该脚本由多个SQL查询组成,每个SQL查询从一个表中获取大量记录并将它们附加到"输出表&# 34 ;.在我看来,创建一个查询以便立即获取所有记录会更容易。问题是,这些现有查询中的每一个都在其WHERE子句中使用各种标准。
我想知道我是否可以简单地创建一个包含所有WHERE条件的表,然后编写一些使用所有这些条件的SQL语句。然后,如果必须更改标准,我可以编辑或添加到该表,而不必经历并重写SQL。
例如,现在它就像:
INSERT INTO SelectedCustomers (CustomerID)
SELECT CustomerID FROM Customers WHERE CustomerName LIKE '%Jones%' AND CustomerAge > '18'
然后继续那里:
INSERT INTO SelectedCustomers (CustomerID)
SELECT CustomerID FROM Customers WHERE CustomerState = 'CT' OR CustomerHair = 'Brown'
进一步向下:
INSERT INTO SelectedCustomers (CustomerID)
SELECT CustomerID FROM Customers WHERE CustomerState = 'NY' AND CustomerHair <> 'Red'
等(它继续......)
任何想法,链接等?
答案 0 :(得分:0)
有几种方法可以做到这一点 - 如果标准总是相同的(例如LIKE '%Jones%'
或CustomerAge > '18'
),那么你所说的是内部联接。
由于您的标准似乎变化很大,我不建议(可以使用动态sql完成,但在我看来,这只会让您的系统更难维护和更慢。)
而是我建议的,因为您的示例仅显示基于来自一个表的视图的ID的选择,然后基于该视图的插入表的连接。当您的条件更改时,更改视图。这看起来像这样。
CREATE OR REPLACE VIEW INSERT_CRITERIA (CustomerID) AS
SELECT CustomerID FROM Customers WHERE CustomerName LIKE '%Jones%' AND CustomerAge > '18'
UNION
SELECT CustomerID FROM Customers WHERE CustomerState = 'CT' OR CustomerHair = 'Brown'
UNION
SELECT CustomerID FROM Customers WHERE CustomerState = 'NY' AND CustomerHair <> 'Red'
然后插入只是
INSERT INTO SelectedCustomers (CustomerID)
SELECT CustomerID FROM INSERT_CRITERIA
这里的优点是您可以将业务规则(例如CustomerState = 'CT'
)移除到易于管理和监控的位置,同时仍然可以获得编译器能够优化这些功能的优势。
如果你真的想要自动化它,我仍然会建议这个视图 - 只需从存储业务规则的表中生成视图。创建/更新视图很容易编写脚本。