【问题标题】:Default constraint to automatically change a value自动更改值的默认约束
【发布时间】:2014-10-03 16:59:37
【问题描述】:

我有一张桌子ProviderValueCard。是否可以在创建新行时设置默认约束,如果列 SessionsProgress > 0,则自动设置列 SurveyCompleted = 1 的条目值,如果 SessionProgress = 0,则将其设置为 = 0?

所以 psedo:如果 SessionsProgress > 0,则 SurveyCompleted = 1 否则 SurveyCompleted = 0

我从 marc_s 对这个问题的回答中得到了这个想法:Automatically inserting datetime with insert

【问题讨论】:

  • @abatishchev - 你打败了我......你也可以为此使用触发器,但计算似乎是要走的路。
  • 如果它不起作用,你需要一个触发器(cmets每15秒只允许1个)(:
  • 很棒的发现。什么是语法,但如果我在这里使用它时想要一个“>”,我在 > 上得到一个语法错误:ALTER TABLE ProviderValueCard ADD SurveyCompleted AS CASE [SessionsProgress] WHEN > '0' THEN 1 WHEN '0' THEN 0 END

标签: sql sql-server tsql


【解决方案1】:

感谢 abatishchev,这就是有效的方法。我无法弄清楚 > 语法错误:/。我在该列中还没有任何重要的内容,因此删除它不是问题。

    ALTER TABLE ProviderValueCard DROP COLUMN SurveyCompleted

ALTER TABLE ProviderValueCard ADD SurveyCompleted AS CASE [SessionsProgress] WHEN '1' THEN 1
WHEN '2' THEN 1
WHEN '3' THEN 1
WHEN '4' THEN 1
WHEN '5' THEN 1
WHEN '0' THEN 0
END

【讨论】:

  • 你不能直接说WHEN '0' THEN '0' ELSE '1' END吗?
  • 当他们输入为 6 时?
【解决方案2】:

你可以通过 bit 获得这种行为

  declare @bit bit;
  set @bit = 0;
  print @bit;
  set @bit = 1;
  print @bit;
  set @bit = 2;
  print @bit;
  set @bit = 2000;
  print @bit;

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多