Scenariusz:
Pracujesz jako programista SQL Server w banku. Mają tabelę Dbo.Customer w bazie danych TechBrothersIT z poniższą definicją.Create Table dbo.Customer (FirstName VARCHAR(50) Not Null, LastName VARCHAR(50), Age SmallInt, PhoneNumber CHAR(9), DOB Date, Gender CHAR(1) )Jak zauważyłeś, LastName może być Null. To jest problem. Firma zauważyła, że później i zawsze chce mieć wartość dla LastName. Zostaniesz poproszony o wykonanie analizy i napisanie skryptu Alter, aby zmienić kolumnę z wartości Null na Not Null. Jakie rzeczy rozważysz lub jakie sugestie przedstawisz?
Rozwiązanie:
Pierwszą rzeczą do rozważenia w tym scenariuszu jest sprawdzenie, czy jakiekolwiek wartości są już wstawione do tabeli dla Last Name jako Null. Jeśli tak jest, nie możesz tak naprawdę iść dalej i zmienić kolumnę z Null na Not Null. Jeśli spróbujesz, zobaczysz błąd poniżej.Msg 515, Level 16, State 2, Line 14Nie można wstawić wartości NULL do kolumny „LastName”, tabeli „TechBrothersIT.dbo.Customer”; kolumna nie zezwala na wartości null. UPDATE kończy się niepowodzeniem.
Oznacza to, że najpierw musimy zająć się wartościami Null w tej kolumnie. Możesz porozmawiać z biznesem i zapytać, co chcieliby zrobić dla wszystkich klientów, których nazwisko jest puste. Listę klientów, dla których nazwisko ma wartość Null, można znaleźć, korzystając z poniższego zapytania.
Select * From dbo.Customer where LastName Is nullFirma może dostarczać różne sugestie, takie jak Zaktualizujmy nazwisko, aby nie wiedzieć, gdzie jest puste lub zaktualizuj nazwisko, aby było puste (''), jeśli jest puste lub zaktualizuj kolumnę Nazwisko do LNNP (nazwisko nie zostało podane) lub wracają do klientów i uzyskać ich nazwisko do aktualizacji
W zależności od sugestii zaktualizuj wartości w kolumnie Nazwisko. Załóżmy, że zdecydowaliśmy się zaktualizować do pustego „”, możemy użyć poniższego zapytania, aby zaktualizować
update dbo.Customer set LastName='' where LastName is NullTeraz możesz zmienić kolumnę w tabeli z Null na Not Null.
Alter Table dbo.Customer Alter Column LastName VARCHAR(50) Not Null