क्या एक ही लेनदेन के दौरान कॉलम बनाना और मूल्यों को सम्मिलित करना संभव है? यह एक अपग्रेड स्क्रिप्ट का हिस्सा है। मुझे निम्नलिखित विधि online मिली, लेकिन यह काम नहीं करता है; मुझे एक त्रुटि मिलती है: Invalid column name 'IndexNumber'.
। मुझे लगता है कि ऐसा इसलिए है क्योंकि लेनदेन ने अभी तक स्तंभ नहीं बनाया है, इसलिए इसमें सम्मिलित करने के लिए कुछ भी नहीं है।कॉलम बनाएं और उसी लेनदेन में डालें?
मेरी स्क्रिप्ट के प्रासंगिक भागों:
Print 'Beginning Upgrade'
Begin Transaction
-- --------------------------------------------------------------------
USE [MyDatabase];
/* Widgets now can be ordered and the order can be modified */
ALTER TABLE [dbo].[Widgets] ADD [IndexNumber] [int] NULL;
DECLARE @ind INT
SET @ind = 0
UPDATE [dbo].[Widgets]
SET @ind = [IndexNumber] = @ind + 1;
ALTER TABLE [dbo].[Widgets] ALTER COLUMN [IndexNumber] [int] NOT NULL;
-- --------------------------------------------------------------------
Commit tran
Print 'Upgrade completed'
कारण है कि [IndexNumber]
एक पहचान स्तंभ नहीं है कि यह संपादन योग्य होना चाहिए है।
उलझन में अच्छा लगता है। किसी निष्पादन का उपयोग लेनदेन के बाहर या इसके बाद कथन का निष्पादन करने का कारण होगा? वास्तविक अपग्रेड के बारे में आपकी पिछली टिप्पणी के लिए काम नहीं कर रहा है, यह मामला हो सकता है लेकिन इस समय यह मेरा एकमात्र सीसा है। – Nenotlep
@Nenotlep - नहीं, यह अभी भी एक ही लेनदेन के भीतर होगा। –
यह वास्तव में जाने का सबसे आसान तरीका लगता है, जो मेरे लिए सबसे अच्छा समानार्थी है। इसके बजाय इसका उपयोग करना मुझे अपने लेबल को पुन: व्यवस्थित करने या मेरे स्क्रिप्ट प्रवाह पर पुनर्विचार करने की आवश्यकता नहीं है। चीयर्स! – Nenotlep