SQL सर्वर में स्कीमा-बाउंड व्यू द्वारा संदर्भित कॉलम का आकार बदलना


124

मैं उपयोग कर sql सर्वर में एक कॉलम का आकार बदलने की कोशिश कर रहा हूँ:

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL

जहां की लंबाई Addr1मूल रूप से थी 40

यह त्रुटि हुई, यह त्रुटि:

The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column.

मैंने इस पर पढ़ने की कोशिश की है और ऐसा लगता है कि क्योंकि कुछ दृश्य इस स्तंभ को संदर्भित कर रहे हैं और ऐसा लगता है कि SQL सर्वर वास्तव में उस स्तंभ को छोड़ने की कोशिश कर रहा है जिसने त्रुटि को उठाया था।

Address_e पिछले DB व्यवस्थापक द्वारा बनाया गया एक दृश्य है।

क्या कोई और तरीका है जिससे मैं कॉलम का आकार बदल सकता हूँ?


2
Address_e पिछले DB एडमिनिस्ट्रेटर द्वारा बनाया गया एक दृश्य है। और जैसा कि रेमस ने उल्लेख किया है, उसमें SCHEMABINDING परिभाषित है।
स्टैलेन

जवाबों:


58

विचारों को संभवतः SCHEMABINDING विकल्प का उपयोग करके बनाया गया है और इसका मतलब है कि ऐसे परिवर्तनों को रोकने के लिए उन्हें स्पष्ट रूप से वायर्ड किया गया है। ऐसा लगता है कि स्कीमबाइंडिंग ने काम किया और आपको उन विचारों को तोड़ने से रोका, भाग्यशाली दिन, हे? अपने डेटाबेस व्यवस्थापक से संपर्क करें और उसे डेटाबेस पर प्रभाव का दावा करने के बाद, परिवर्तन करने के लिए कहें।

से MSDN :

SCHEMABINDING

अंतर्निहित तालिका या तालिकाओं के स्कीमा के लिए दृश्य को बांधता है। जब SCHEMABINDING निर्दिष्ट किया जाता है, तो आधार तालिका या तालिकाओं को इस तरह से संशोधित नहीं किया जा सकता है जो दृश्य परिभाषा को प्रभावित करे। दृश्य परिभाषा को पहले संशोधित किया जाना चाहिए या उस तालिका पर निर्भरता को हटाने के लिए संशोधित किया जाना चाहिए।


1
धन्यवाद रेमुस, दृश्य में परिभाषित किया गया SCHEMABINDING है। क्या बाधा को दरकिनार करने का कोई आसान तरीका है या क्या मुझे वास्तव में इसे काम करने के लिए विचारों को हटाने की आवश्यकता है?
स्टेलन

1
आप इसे दरकिनार नहीं कर सकते, यही इसका पूरा उद्देश्य है। तालिका परिवर्तन को रोकने के लिए स्कीमाबिंडिग को जोड़ने के लिए कोई अतिरिक्त लंबाई में चला गया। यह कुछ दुर्घटना नहीं है, ऐसा लगता है कि व्यक्ति जानता है कि क्या कर रहा था। क्या आप वाकई टेबल बदलना चाहते हैं?
रेमस रुसानु

1
हां, मुझे यकीन है कि =) और तार्किक रूप से (भले ही मुझे पता है कि यह उस तरह से काम नहीं करता है) मैं स्तंभ की लंबाई बढ़ा रहा हूं, जो कि वास्तव में केवल तभी ठीक होना चाहिए जब स्तंभ को गिराया नहीं गया हो, लेकिन दुर्भाग्य से यह ऐसा नहीं है ... लेकिन आपकी मदद के लिए धन्यवाद! = डी
स्टेलन

2
मैं उसी समस्या को देख रहा हूं और दुर्भाग्य से हम विचारों को अनुक्रमित करने के लिए SCHEMABINDING विचारों का उपयोग कर रहे हैं। इसलिए मेरे मामले में मैं अंतर्निहित तालिकाओं में परिवर्तन को स्पष्ट रूप से ब्लॉक करने के लिए SCHEMABINDING का उपयोग नहीं कर रहा हूं, लेकिन केवल अनुक्रमणित दृश्यों का उपयोग करने के लिए SQL सर्वर की आवश्यकताओं का पालन करने के लिए। मैं भी अपने विचारों को छोड़ने और पुनः बनाए बिना इसे बायपास करना चाहूंगा।
जिपरसन

256
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

11
नहीं, समस्या यह थी कि रेमस ने क्या उल्लेख किया था। कोड के साथ कुछ भी गलत नहीं है
Staelen

11
@ निलराड उम्म, शायद आप पीएल-एसक्यूएल के बारे में सोच रहे हैं? ALTER COLUMN SQL 2008 R2
schmidlop

4
क्या मैं कुछ भूल रहा हूँ? इतने अपवित्र क्यों? यह प्रश्न का उत्तर नहीं देता है।
एंडी विसेंडांगर

13
अप-वोटों की संख्या इसलिए हो सकती है क्योंकि यह प्रश्न वर्तमान में 'tsql बदल nvarchar लंबाई' के लिए शीर्ष Google हिट है और इस प्रकार लोग (मेरे जैसे) जो केवल याद रखना चाहते हैं कि कॉलम की लंबाई को कैसे बदला जाए, इस उत्तर को और देखें -इसे बिना स्पॉट किए "थैंक्स" कहना पसंद करें (जैसा कि मैंने आपकी टिप्पणी को पढ़ने तक नहीं किया था) कि सवाल शीर्षक के सुझाव से अधिक सूक्ष्म है।
डंबलड

6

यदि कोई SQL Server 2008 में "प्रतिकृति तालिका की स्तंभ चौड़ाई बढ़ाना" चाहता है, तो " replicate_ddl=1" की संपत्ति को बदलने की कोई आवश्यकता नहीं है । बस नीचे दिए गए चरणों का पालन करें -

  1. SSMS खोलें
  2. प्रकाशक डेटाबेस से कनेक्ट करें
  3. चलाने के आदेश -- ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. यह से स्तंभ चौड़ाई में वृद्धि होगी varchar(x)करने के लिए varchar(22)और एक ही परिवर्तन आप ग्राहक पर देख सकते हैं (लेनदेन दोहराया गया)। तो प्रतिकृति को फिर से शुरू करने की कोई जरूरत नहीं है

आशा है कि यह उन सभी को मदद करेगा जो इसकी तलाश कर रहे हैं।


5

इस लिंक को देखें

T-SQL कमांड का उपयोग करके डिफ़ॉल्ट बाधा के साथ एक MS SQL सर्वर टेबल कॉलम का आकार बदलें या संशोधित करें

ऐसी SQL सर्वर समस्या के लिए समाधान होने जा रहा है

तालिका स्तंभ पर DEFAULT बाधा को गिराना या अक्षम करना।

तालिका स्तंभ डेटा प्रकार और / या डेटा आकार को संशोधित करना।

Sql टेबल कॉलम पर डिफ़ॉल्ट बाधा को फिर से बनाना या सक्षम करना।

अलविदा


और स्कीमा बाध्यकारी विचारों को गिराए जाने और फिर से बनाने की आवश्यकता है।
nurettin

2

यहां वह है जो उस प्रोग्राम के संस्करण के साथ काम करता है जिसका मैं उपयोग कर रहा हूं: आपके लिए भी काम कर सकता है।

मैं सिर्फ निर्देश और आदेश देता हूं जो इसे करता है। कक्षा तालिका का नाम है। आप इसे इस विधि के साथ तालिका में बदल देते हैं। न केवल खोज प्रक्रिया पर वापसी।


टेबल क्लास देखें

select * from class

पूरे लेबल को फिट करने के लिए एफआईडी (कॉलम "फेसि" के रूप में देखा गया) और क्लासनंबर ("क्लासनु" के रूप में देखा गया) की लंबाई बदलें।

alter table class modify facid varchar (5);

alter table class modify classnumber varchar(11);

अंतर देखने के लिए फिर से तालिका देखें

select * from class;

(अंतर को देखने के लिए फिर से कमांड चलाएँ)


यह अच्छे के लिए वास्तविक तालिका को बदलता है, लेकिन बेहतर के लिए।

PS मैंने इन निर्देशों को आदेशों के लिए एक नोट के रूप में बनाया है। यह एक परीक्षण नहीं है, लेकिन एक पर मदद कर सकता है :)


0

स्तंभ समतलीकरण की जाँच करें। यह स्क्रिप्ट टकराव को तालिका डिफ़ॉल्ट में बदल सकती है। स्क्रिप्ट में वर्तमान कोलाजेशन जोड़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.