තීරුවක් වෙනස් කිරීම: ශුන්‍ය නොවන්න


1230

මට සම්පූර්ණ වගු කිහිපයක් ඇති වගුවක් ඇත. හේතු කිහිපයක් නිසා මෙය නුසුදුසු ය, එබැවින් මම සියලු ශුන්‍යයන් 0 වෙත යාවත්කාලීන කර මෙම තීරු සැකසීමට බලාපොරොත්තු වෙමි NOT NULL. ශුන්‍ය වෙනස් කිරීම හැරුණු විට 0, දත්ත ආරක්ෂා කළ යුතුය.

තීරුවක් (එය අමතන්න ) " " ලෙස වෙනස් කිරීමට මම නිශ්චිත SQL සින්ටැක්ස් සොයමි . දත්ත යාවත්කාලීන කර ඇති බව උපකල්පනය කරන්න.ColumnAnot null

SQL සේවාදායකය 2000 භාවිතා කිරීම .


16
තවත් දෙයක් - තීරුව නියම නොකරන දැනට පවතින ඕනෑම ඇතුළත් කිරීම් අසමත් නොවන බවට පෙරනිමියක් එක් කිරීමට ඔබට අවශ්‍ය විය හැකිය: වෙනත් ටේබල් ෆූ එක් කරන්න FOO_Bar_Default DEFAULT 0 බාර් සඳහා
මාක් ග්‍රෙවෙල්

4
සමහර තත්වයන් යටතේ තීරුවක් වෙනස් කිරීම NOT NULLවිශාල වශයෙන් ලොග් වීමට හේතු විය හැකි බව දැන ගැනීම ඔබ පුදුමයට පත් කළ හැකිය .
මාටින් ස්මිත්

Answers:


2031

පළමුව, සියලු වත්මන් NULLඅගයන් අතුරුදහන් කරන්න:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

ඉන්පසු, "NULLs" තහනම් කිරීම සඳහා වගු අර්ථ දැක්වීම යාවත්කාලීන කරන්න:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL

50
ඉහත නිවැරදි ප්‍රතිචාර දෙකට අගය එකතු කිරීමට මට ඉඩ දෙන්න. NULL හි අර්ථ නිරූපණයට අර්ථ කිහිපයක් තිබිය හැකිය. පොදු අර්ථයක් වන්නේ නොදන්නා දෙයකි. SCORE උදාහරණයක් ලෙස ගන්න. ශුන්‍ය ලකුණු සහ ශුන්‍ය ලකුණු යනු වෙනස් ලෝකයකි! ඔබ ඉහත නිර්දේශ කිරීමට පෙර. ඔබේ යෙදුම එහි ව්‍යාපාර තර්කනයේ අහෝසි නොවන බවට වග බලා ගන්න.
TechTravelThink

243
ඔබ යතුරු ලියනය කර ඔබේ ඩීබී පුපුරා ගියහොත් පළමුව ඔබේ දත්ත ගබඩාව උපස්ථ කරන්න.
mpen

20
එහි අමුතු MS SQL කළමනාකරණ චිත්‍රාගාරය එම විකල්පයට ඉඩ නොදේ, එය "හැලෙන වගුව ..." ගැන පුරසාරම් දොඩයි
සෙබස්තියන්

14
දත්ත සමුදායන් සැමවිටම උපස්ථ කළ යුතුය. ඔබගේ පුද්ගලයින්ගෙන් එක් අයෙකු ලිවීම සහ යාවත්කාලීන කිරීම හෝ මකා දැමීම සහ WHERE වගන්තිය අමතක කරන්නේ කවදාදැයි ඔබ දන්නේ නැත.
විවියන් ගඟ

2
E සෙබස්තියන් ගොඩ්ලෙට්: එම අනතුරු ඇඟවීම ක්‍රියා විරහිත කිරීමට ඔබට ඉඩ සලසන සැකසුමක් තිබේ, නැතහොත් එය වගුව වෙනස් කිරීමෙන් වලක්වනු නොලැබේ. සමහර අවස්ථා වලදී, වගුවක සැලැස්ම වෙනස් කිරීම සඳහා නව වගුවක් සෑදීම අවශ්‍ය වේ, පැරණි හා පැරණි වගුවෙන් පිටපත් කළ දත්ත පහත වැටුණි. මෙම ක්‍රියාවලියේ දෝෂයක් දත්ත නැතිවීමට හේතු විය හැකි බැවින්, SSMS ඔබට අනතුරු අඟවන අතර පෙරනිමියෙන් එය කිරීමෙන් ඔබව වළක්වයි.
සර්

58

මට එකම ගැටළුවක් තිබුනි, නමුත් ක්ෂේත්‍රය පෙරනිමියෙන් ශුන්‍ය කිරීමට භාවිතා කළ අතර දැන් මට එය 0 ට පෙරනිමි කිරීමට අවශ්‍යය. ඒ සඳහා mdb විසඳුමෙන් පසු තවත් එක් පේළියක් එක් කිරීම අවශ්‍ය වේ:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];

මෙය ගැටලුවට පිළිතුරු සපයන්නේ නැත. පෙරනිමිය දැනටමත් සකසා ඇත, එය වෙනස් කළ යුතු NULL නොවේ. ඔබගේ පිළිතුර සමඟ පමණක්, පවතින සියලුම වාර්තා NULL ලෙස පවතිනු ඇති අතර ගැටළුව පවතී.
පැන්ඩාවුඩ්

6
"තවත් එක් පේළියක් එක් කිරීම" පිළිබඳ කොටස ඔබ කියවූවාද? මෙන්, මෙය ඉහත පිළිතුරට අමතරව ද?
ග්‍රෙග් ඩගර්ටි

7
ඇත්ත වශයෙන්ම, "තවත් එක් පේළියක් එක් කිරීම" යන්නෙන් අදහස් කරන්නේ "ඉහත පිළිතුරට අමතරව" (විශේෂයෙන් "ඉහත" පිළිතුරු බොහොමයක් ඇති හෙයින්) - ඔබ අදහස් කළේ එය නම්, වචන සැබවින්ම වෙනස් විය යුතු අතර ඔබ කළ යුතුය ඔබ යොමු කරන පිළිතුරේ රේඛාව ඇතුළත් කරන්න
පැන්ඩාවුඩ්

3
ඔබගේ සීමාවන් පැහැදිලිව නම් කිරීම හොඳ අදහසක් බව පැවසීමට අවශ්‍ය වූ අතර පෙරනිමි ඇතුළත් වේ. ඔබට කවදා හෝ තීරුවක් දැමීමට අවශ්‍ය නම්, ඔබට හැකි වීමට පෙර අතහැර දැමිය යුතු අවහිරතාවයේ නම ඔබ දැනගත යුතුය. අපගේ ඩීබී සංක්‍රමණයේදී කිහිප වතාවක් මේ සඳහා දිව යන්න. උදාහරණයට එය මෙහි ඇතුළත් බව මම දනිමි, නමුත් නම අවශ්‍ය නොවන නිසා එය තවමත් සමහර ඩිව්ස් සංචාරය කරන ස්ථානයකි.
jocull

38

ඔබට එය පියවර දෙකකින් කිරීමට සිදුවේ:

  1. තීරුවේ ශුන්‍ය නොවන පරිදි වගුව යාවත්කාලීන කරන්න.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. තීරුවේ දේපල වෙනස් කිරීමට වගුව වෙනස් කරන්න
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

27

ඔරකල් 11g සඳහා, තීරු ලක්ෂණය පහත පරිදි වෙනස් කිරීමට මට හැකි විය:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

එසේ නොමැතිනම් අබාචෙව්ගේ පිළිතුර හොඳ යැයි පෙනුණි. ඔබට වෙනස් කිරීම නැවත කළ නොහැක - එය (අවම වශයෙන් SQL සංවර්ධකයා තුළ) තීරුව දැනටමත් අහෝසි වී නැති බවට පැමිණිලි කරයි.


ඔරකල් 11 හි, ඔබට එය නැවත කිරීමට අවශ්‍ය නොවන බව පෙනේ datatype. හුදෙක් columname NOT NULLප්රමාණවත්ය. ප්‍රලේඛනය බලන්න .
jpmc26


16

තීරුව අද්විතීය හඳුනාගැනීමක් නොවන තාක් කල්

UPDATE table set columnName = 0 where columnName is null

ඉන්පසු

වගුව වෙනස් කර ක්ෂේත්‍රය ශුන්‍ය නොවන ලෙස සකසා පෙරනිමි අගය 0 ලෙස සඳහන් කරන්න


5

අවස්ථාවක දී FOREIGN KEY CONSTRAINT... ප්රශ්නයක් වනු ඇත '0' ප්රාථමික යතුර වගුවේ තීරු තුල තිබේ නම්. ඒ සඳහා විසඳුම වන්නේ ...

පියවර 1:

මෙම කේතය භාවිතයෙන් සියලු බාධක අක්‍රීය කරන්න:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

පියවර 2:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

පියවර 3:

මෙම කේතය භාවිතයෙන් සියලු බාධක සක්‍රීය කරන්න:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

4

මෙය සරල බව පෙනේ, නමුත් ක්‍රියා කරන්නේ ඔරකල් මත පමණි:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

ඊට අමතරව, මේ සමඟ, ඔබට තීරු එකතු කළ හැකිය, එය වෙනස් කිරීම පමණක් නොවේ. අගය අහෝසි නම්, මෙම උදාහරණයේ පෙරනිමි අගය (0) වෙත එය යාවත්කාලීන වේ.


ඔව්, නමුත් ගූගල් විසින් මෙහි සිටින පුද්ගලයින් යොමු කරයි .. එයට ලැබුනේ ඉහළ නැගීම් රාශියක් එයට හේතු වන අතර බොහෝ පසුබෑමකි. මම හිතන්නේ එය ප්‍රයෝජනවත්. මෙය නොසලකා හැරීමට සෑම කෙනෙකුටම නිදහස ඇත, නමුත් මම අවංකවම සිතන අතර මෙය මිනිසුන්ට උදව් වන බව දකිමි.
csomakk


4

මගේ නඩුවේ පළ කරන ලද පිළිතුරු සමඟ මට දුෂ්කරතා ඇති විය. මම පහත සඳහන් දෑ භාවිතා කර අවසන් කළෙමි:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

වෙනස් VARCHAR(200)ඔබගේ datatype කිරීමට, විකල්පයක් පෙරනිමි අගය වෙනස් කරන්න.

ඔබට පෙරනිමි අගයක් නොමැති නම්, මෙම වෙනස සිදුකිරීමේ ගැටලුවක් ඔබට ඇති වනු ඇත, පෙරනිමියෙන් එය ගැටුමක් නිර්මාණය කරයි.


1

අපි උදාහරණයක් ගනිමු:

TABLE NAME=EMPLOYEE

මට තීරුව වෙනස් කිරීමට EMPLOYEE_NAMEඅවශ්‍යයි NOT NULL. මෙම විමසුම කාර්යය සඳහා භාවිතා කළ හැකිය:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

කරුණාකර කෑගහන්න එපා, ඒ වෙනුවට ඔබට වඩාත් කියවීමට හැකි වන පරිදි ආකෘතිකරණය භාවිතා කරන්න. උදා: කේත කොටස හඳුනා ගැනීමට උදව් කරන්න. stackoverflow.com/editing-help
යුනොෂ්

එසේම, කරුණාකර සියලු අක්ෂරවල දිගු පෙළ ලියන්න එපා. එය අන්තර්ජාලයේ කෑ ගැසීම ලෙස සැලකේ
Zoe

1
Aw පවන් තිවාරි කරුණාකර සම්පූර්ණ සංස්කරණය කරන්න. ඔබ තනතුරේ සියලුම ගැටළු නිරාකරණය කළ බවක් නොපෙනුණි. එය බොහෝමයක් ප්‍රාග්ධනීකරණය කර ඇත.
ද්විත්ව බීප්

හැඩතල ගැන්වීමේ ගැටළු හැරුණු විට, ඔබේ පිළිතුරෙන් ලැබෙන අමතර අවබෝධය කුමක්දැයි කරුණාකර වඩාත් පැහැදිලි කරන්න, උදා: රැල්ෆ් විග්ගම්, ජේඩීඑම්, රශ්මි සිං සහ ට්‍රොපර් 31 ගේ පැරණි පිළිතුරු සමඟ සසඳන විට බැලූ බැල්මට ක්‍රියාකාරී ලෙස සමාන බව පෙනේ. ඔබේ විසඳුමේ සියුම් කරුණු පෙන්වා දීම අවශ්‍ය බව පෙනේ. පිළිතුරු පිටපත් කිරීමේ හැඟීම වළක්වා ගැනීමට උත්සාහ කරන්න ...
යුනොෂ්

0

ජේඩීකේ (ඔරකල්ගේ සහාය ඇතිව අපාචේ ඩර්බි බෙදා හැරීම) සඳහා ඇතුළත් කර ඇති ජාවා ඩීබී සඳහා පහත සඳහන් දෑ මා වෙනුවෙන් වැඩ කළේය

alter table [table name] alter column [column name] not null;

0

තීරුව අහෝසි නොකිරීම සහ පෙරනිමිය එකතු කිරීම SSMS GUI හි ද කළ හැකිය.

  1. අනෙක් අය දැනටමත් ප්‍රකාශ කර ඇති පරිදි, පවතින සියලුම දත්ත "ශුන්‍ය නොවේ" යන තෙක් ඔබට "ශුන්‍ය නොවේ" ලෙස සැකසිය නොහැක:

UPDATE myTable SET myColumn = 0

  1. එය අවසන් වූ පසු, සැලසුම් දර්ශනයේ ඇති වගුව සමඟ (මේසය මත දකුණු ක්ලික් කර "නිර්මාණ දර්ශනය" ක්ලික් කරන්න), ඔබට ඉඩ දෙන්න ශුන්‍ය තීරු එලෙස සලකුණු නොකරන්න :

රූප විස්තරය මෙහි ඇතුළත් කරන්න

  1. තෝරාගත් තීරුව සමඟ තවමත් නිර්මාණ දර්ශනයේ, ඔබට පහත කවුළුවේ තීරු ගුණාංග දැකගත හැකි අතර පෙරනිමිය එහි 0 ලෙස සකසන්න.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


මම පහත වැටීම දකින නමුත් ප්‍රතිපෝෂණයකින් තොරව මට කිසිවක් නිවැරදි කළ නොහැක. යමක් ක්‍රියාත්මක නොවන්නේ නම් කරුණාකර මට දන්වන්න.
ටෝනි එල්.

-1

පහත දැක්වෙන වර්ග අඩි භාවිතා කරමින් ඔබට පවතින ඩීබී තීරුවේ අර්ථ දැක්වීම වෙනස් කළ හැකිය.

ALTER TABLE mytable modify mycolumn datatype NOT NULL;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.