我试图用默认值'NO'替换NULL,但即使我执行它,当我尝试查看数据时它仍然显示NULL。我已经尝试在列上删除约束,但它不起作用
/*------------------------
use AuntieB
--alter table charity
-- add STORE char(10);
--update charity
--set STORE = 'YES'
--where Name = 'Salvation Army' or Name = 'Mother Wattles' or Name = 'Fresh Start Charity'
alter table charity
add default 'No' for STORE;
select * from charity
------------------------*/
CharityID Name Address City State Zip Phone ContactID STORE
----------- -------------------- ------------------------------ ------------------------------ ----- ---------- ------------ ----------- ----------
1000 St. Francis Home 45875 West. Hill St. Utica MI 48045 586-795-3486 1025 NULL
1001 Helping Hands 98563 Stadium Detriot MI 48026 313-978-6589 1030 NULL
1002 Boy Scouts 1155 E. Long Lake Rd Troy MI 48085 248-253-9596 1036 NULL
1003 Focus Hope 54362 Grand River Detroit MI 48312 313-478-7895 1041 NULL
1004 Fresh Start Charity 12569 Gratiot Ave. Roseville MI 48084 555-555-2035 1046 YES
1005 St. John Hospital 59652 Shelby Rd. Shelby Twp. MI 48317 586-569-6987 1050 NULL
1006 Salvation Army 56231 Somewhere Blvd. Eastpointe MI 48021 586-555-1212 1056 YES
1007 LA Angels Traders 2468 Halo Park Dr South Los Angelas MI 90234 903-965-3556 2015 NULL
1008 Purple Heart 28765 Van Dyke Sterling Heights MI 48313 586-732-8723 1061 NULL
1009 St. Raja Home 45875 West. Hill St. Utica MI 48045 586-795-3486 1062 NULL
1010 Mother Wattles 4568 Griswold Detroit MI 48205 313-478-9856 2016 YES
1011 Ron McDonald House 649 West Road Utica MI 48045 586-795-9979 1030 NULL
1012 St. Jude 262 Danny Thomas Place Memphis MI 38105 800-822-6344 1030 NULL
(13 rows affected)
答案 0 :(得分:3)
来自docs:
将DEFAULT定义添加到表中的现有列时,默认情况下,数据库引擎仅将新的默认值应用于添加到表中的新数据行。使用以前的DEFAULT定义插入的现有数据不受影响。但是,在向现有表添加新列时,可以指定数据库引擎将缺省值(由DEFAULT定义指定)而不是空值插入到表中现有行的新列中。 / p>
因此,在将DEFAULT定义添加到现有列时,您需要自己填充现有行。
答案 1 :(得分:1)
您无法在现有列中添加新的默认约束,并在同一DDL操作中更新退出的NULL值。您需要在之后将值NULL显式更新为所需的值。
但是,您可以添加具有默认约束的新列,并通过指定WITH VALUES
子句将默认值应用于所有现有行:
ALTER TABLE dbo.charity
ADD store char(10) NULL
CONSTRAINT df_charity_STORE DEFAULT 'No'
WITH VALUES;
此方法也允许您添加新的NOT NULL
列。
如果您运行的是SQL Server的Enterprise(或Developer)版本,WITH VALUES
是一个仅限元数据的操作,它可以避免在操作期间内部更新表中的每一行。该操作在实际版本中物理更新表中的每一行。
答案 2 :(得分:0)
这里有两种选择。您可以像这样更新所有空值;
update charity
set STORE = 'NO'
where STORE is null
或者如果只想在选择空值时替换空值,可以使用ISNULL
语句。
select ISNULL(STORE,'NO') from charity
此外,为现有列添加具有默认值的约束不会更新以前的数据。它为新的行设置默认值。