如何在SQL中创建具有默认值的空列?
我正在尝试创建一个购物车,在这里,客户可以选择是否需要送货或商店提货。交货的默认价格为10美元。如何将交货的默认值设置为10美元,但仅当客户选择交货时才设置?当客户选择交货时,应在SQL server中将默认值设置为10,并将null(不传递任何内容)传递给SQL server如何在SQL中创建具有默认值的空列?,sql,sql-server,ssms,ssms-2012,Sql,Sql Server,Ssms,Ssms 2012,我正在尝试创建一个购物车,在这里,客户可以选择是否需要送货或商店提货。交货的默认价格为10美元。如何将交货的默认值设置为10美元,但仅当客户选择交货时才设置?当客户选择交货时,应在SQL server中将默认值设置为10,并将null(不传递任何内容)传递给SQL server 因此,逻辑的一部分将在代码中,而另一部分在SQL server中 我想你指的是计算列: CREATE TABLE YourTableName ( .... , DeliveryCharge AS CASE
因此,逻辑的一部分将在代码中,而另一部分在SQL server中 我想你指的是计算列:
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的列,该列指定它是否为传递。是否尝试解决该问题?一些生成列的SQL查询?您正在使用orm吗?还是jyst正在代码中插入字符串?如果要使插入字符串不传递任何内容,甚至不传递0。如果使用EF,c#是强类型,则不能将null传递为int、bigin或。。它总是0。因此,在这种情况下,你的代码必须通过10。正如我的名字周围没有蓝色框所表明的,我不是OP,所以它不是我的代码。但是,如果将默认值设置为10,则当默认值不适用时,例如,当选择了商店提货(免费)时,必须传递0或其他一些非null值。我是说你应该澄清在那种情况下你会怎么做,因为这是答案的另一半。0不是空的。0等于0。你能发布你试图插入的代码吗?我很清楚“0不是空的”,但谢谢你假设我不是空的。我再说一遍:我不是OP,这不是我的代码。我不想插入任何内容。我想问的是,如果您的默认值不是当前交易的正确值,您会怎么做,因为完整的答案将涵盖这两个方面。显然,解决方案是通过0,从而覆盖默认值10。另外,“passnull(不传递任何内容)”是不明确的。是哪一个?显然,传递
null
将插入null
,而不是默认值。因此,您必须从语句中完全省略该列,或者传递default
。