【问题标题】:query changing automatically on weekend / one day per week (MS SQL)查询在周末/每周一天自动更改(MS SQL)
【发布时间】:2018-10-15 12:52:27
【问题描述】:

我在另一个数据库的表 A 上使用 VIEW 插入/更新到我的表 B 该视图具有过滤新行以减少网络流量的条件:

SELECT ... from A
WHERE  new_records = 1

基于该视图,我有一个存储过程每天每小时运行一次。

每周一次,我想通过查询来验证我的表 B,该查询使用表 A 中的所有记录

我想将该视图更改为:

SELECT ... from A
-- WHERE new_records = 1

我想有一份可以改变我看法的工作。但是我发现我无法在存储过程中执行 ALTER VIEW。

是否可以包含类似

的内容
 IF today = Sunday then Do not use WHERE 
 ELSE
 ...WHERE

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我会将其实现为 2 个视图 - 第一个选择所有内容,第二个从第一个选择带有额外的 new_records = 1 过滤器。

您可以在单个视图中添加您询问的逻辑:

WHERE datename(DW,GETDATE()) = 'Sunday' OR new_record=1

但我真的不喜欢在特定日期对视图进行编码以改变行为的概念,当您想要运行临时验证时会发生什么?你会被卡住的。

proc 每小时调用一次,但你提到你想每周检查一次,如果它是一个单一的视图,你会在星期日运行 24 次检查,因为你的每小时调用在 Sunday 谓词上接听。

最后说明 - 如果您采用更改视图方法,则需要为执行帐户授予额外的特权,否则这些特权是可以避免的。

【讨论】:

  • 这很好用,很好理解。然而 datename(DW,GETDATE()) 带来的结果取决于语言。
  • @Volker - 确实如此,但我建议无论如何不要这样做。
【解决方案2】:

怎么样 where new_records=1 or datepart(weekday,getdate())=7 ?

【讨论】:

  • 我不明白它是怎么做到的。这是满足“是否可以包含类似 之类的内容”所需的确切代码。
  • 这也可以正常工作:比较按预期工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多