Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中创建具有默认值的空列?_Sql_Sql Server_Ssms_Ssms 2012 - Fatal编程技术网

如何在SQL中创建具有默认值的空列?

如何在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

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

当客户选择交货时,应在SQL server中将默认值设置为10,并将null(不传递任何内容)传递给SQL server


因此,逻辑的一部分将在代码中,而另一部分在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