【问题标题】:How do I create a null column but with default value in SQL?如何在 SQL 中创建一个空列但具有默认值?
【发布时间】:2016-07-17 10:18:56
【问题描述】:

我正在尝试创建一个购物车,客户可以在其中选择是否需要送货或商店取货。交货的默认价格为 10 美元。如何将交货的默认值设置为 10 美元,但仅限客户选择交货时?

【问题讨论】:

  • 你试过解决了吗?一些产生列的 SQL 查询?

标签: sql sql-server ssms ssms-2012


【解决方案1】:

我认为您的意思是计算列:

CREATE TABLE YourTableName
( 
   ....
, DeliveryCharge AS CASE
       WHEN TYPE == 1 THEN 10
       WHEN TYPE == 0 THEN NULL
   END
)

或者您可以创建一个触发器,在该表上设置 INSERT/UPDATE 的值:

CREATE TRIGGER TR_YourTableName_DeliveryCharge
ON YourTableName
FOR INSERT, UPDATE
AS
UPDATE YourTableName SET DeliveryCharge = CASE TYPE WHEN 1 THEN 10 ELSE NULL END
go

假设您有一个名为 TYPE 的列,它指定它是否是交货。

【讨论】:

    【解决方案2】:

    您应该在 SQL Server 中将默认值设置为 10,并在客户选择 Delivery 时将 null(不传递任何内容)传递给 SQL Server。

    所以逻辑部分将在您的代码中,而其他部分在 SQL Server 中。

    【讨论】:

    • 你在使用 orm 吗?或者您正在代码中插入字符串?如果您要插入字符串不传递任何东西,甚至不传递 0。
    • 如果您使用的是 EF ,c# 是强类型,您不能将 null 作为 int 、 bigin 或.. 它始终为 0 。所以在这种情况下你必须在你的代码中传递 10。
    • 正如我的名字周围没有蓝色框所示,我不是 OP,所以它不是我的代码。但是,如果您将默认值设置为 10,则当默认值不适用时,您必须传递 0 或其他一些非null 值,例如选择存储拾取(无充电)时。我是说你应该澄清在那种情况下你会做什么,因为这是答案的另一半。
    • 0 不为空。 0 为零。你能发布你试图插入的代码吗?
    • 我很清楚“0 不为空”,但感谢您假设我没有。我再说一遍:我不是 OP。这不是我的代码。我不想插入任何东西。我问的是在您的默认值不是当前交易的正确值的情况下您会做什么,因为完整的答案将涵盖两者。显然,解决方案是传递 0,从而覆盖默认值 10。此外,“传递 null(不传递任何东西)”是模棱两可的。它是哪一个?显然,传递null 将插入null,而不是默认值。因此,您必须从语句中完全省略该列,或者改为传递 default
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多