2011-01-31 13 views
15

मैं एक नया कॉलम जोड़ने के लिए एक टेबल को बदलने की कोशिश कर रहा हूं, फिर इसमें एक नई पंक्ति डालें।एसक्यूएल सर्वर 2000 - वैकल्पिक तालिका + इंसर्ट INTO = त्रुटियां?

ALTER TABLE Roles ADD ModifiedDate DateTime; 
INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate) 
    VALUES ('Name', 'Description', 0, 1, GETDATE(), GETDATE()) 

लेकिन मैं मिलता है:

Msg 207, Level 16, State 1, Line 1 
Invalid column name 'ModifiedDate'. 

जब मैं एसक्यूएल सर्वर प्रबंधन स्टूडियो में ऊपर एसक्यूएल को चलाने के लिए प्रयास करें। मुझे लगता है कि यह एक स्टूडियो त्रुटि है, सर्वर त्रुटि नहीं। यदि एसक्यूएल चलाया गया था, तो यह काम करना चाहिए क्योंकि कॉलम उस बिंदु पर मौजूद होगा।

मैं तालिका में एक नया कॉलम कैसे जोड़ सकता हूं और फिर उस तालिका में डाल सकता हूं?

संस्करण:

  • SQL Server 2000
  • एसक्यूएल सर्वर प्रबंधन स्टूडियो 2008

उत्तर

18

जैसी उम्मीद थी। SQL सर्वर लाइन से लाइन निष्पादित नहीं करता है। यह बैच को संकलित और पार्स करता है, और जब ऐसा होता है तो स्तंभ मौजूद नहीं होता है।

आप 2 कार्यों दसगुणा करने की जरूरत है इस प्रकार

ALTER TABLE Roles ADD ModifiedDate DateTime; 
EXEC (' 
    INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate) 
    VALUES (''Name'', ''Description'', 0, 1, GETDATE(), GETDATE()) 
') 

एक "GO" केवल ग्राहक उपकरणों के लिए एक बैच विभाजक है और सर्वर

+1

क्या इस बैचिंग को बंद करने का कोई तरीका है? मेरे पास इस SQL ​​फ़ाइल में 20 -30 आइटम के बारे में यह समस्या है। यह एक संस्करण से दूसरे संस्करण में डेटाबेस अद्यतन कर रहा है। – Justin808

+1

@ जस्टिन 808: गतिशील एसक्यूएल या गो के बिना नहीं। यह है कि SQL सर्वर निष्पादन योजना बनाता है और यह कैसे काम करता है इसके लिए मूलभूत है। यह लाइन द्वारा प्रक्रियात्मक/लाइन नहीं है। – gbn

+0

आपके समाधान को जो मैंने पोस्ट किया है उससे बेहतर है। – Lamak

0

लेन-देन के बारे में क्या द्वारा मान्यता प्राप्त नहीं है?

BEGIN TRANSACTION; 
ALTER TABLE Roles ADD ModifiedDate DateTime; 
GO; 
COMMIT TRANSACTION; 

BEGIN TRANSACTION; 
INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate) VALUES ('Name', 'Description', 0, 1, GETDATE(), GETDATE()); 
GO; 
COMMIT TRANSACTION; 
संबंधित मुद्दे