जब मैं एक कर्सर पाश अंदर निम्नलिखित एसक्यूएल टुकड़ा चलाने का प्रयास,कर्सर लूप में उपयोग के लिए मैं एकाधिक कॉलम कैसे प्राप्त करूं?
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
मैं निम्न संदेश मिलता है,
संदेश 15248, स्तर 11, राज्य 1, प्रक्रिया sp_rename, रेखा 213
या तो पैरामीटर@objname
संदिग्ध है या दावा किया गया है@objtype
(COLUMN) गलत है।
क्या गलत है और मैं इसे कैसे ठीक करूं? मैंने कॉलम नाम को ब्रैकेट []
में लपेटने की कोशिश की, और डबल कोट्स ""
सुझाए गए कुछ खोज परिणामों की तरह।
संपादित करें 1 -
यहां संपूर्ण स्क्रिप्ट है। मैं नाम का नाम बदलने के लिए टेबल नाम कैसे पास करूं? मुझे यकीन नहीं है कि ऐसा कैसे करें क्योंकि स्तंभ नाम कई तालिकाओं में से एक में हैं।
BEGIN TRANSACTION
declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500)
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'
open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N', column'
print @cmd
EXEC sp_executeSQL @cmd
fetch next from Tests into @test
END
close Tests
deallocate Tests
ROLLBACK TRANSACTION
--COMMIT TRANSACTION
संपादित करें 2 - स्क्रिप्ट "पीसीटी" उपसर्ग के साथ कॉलम जिनके नाम एक पैटर्न से मेल खाते हैं, इस मामले में नाम बदलने के लिए बनाया गया है। कॉलम डेटाबेस के भीतर विभिन्न तालिकाओं में होते हैं। सभी तालिका नाम "टेस्टडेटा" के साथ उपसर्ग किए गए हैं।
यह लाइन एक स्ट्रिंग को जोड़ती है। आप इसे क्यों प्रिंट नहीं करते हैं ताकि आप देख सकें कि स्ट्रिंग की सामग्री क्या है, –
'@ test' में 'table.column' या' schema.table.column'] का रूप है (http://msdn.microsoft .com/en-us/लाइब्रेरी/ms188351.aspx), है ना? – GSerg
यदि @test में योग्य नाम है तो इसे apostrophes में होना आवश्यक है। यदि एक ही धारणा है, तो सही() तालिका नाम में पहले तीन वर्णों को हटा देगा; आप कॉलम नाम के अंतिम पात्रों को प्रतिस्थापित करना चाहते थे, यह 'LEFT' होगा। क्या आप कृपया सेट @test = ... जोड़कर स्क्रिप्ट का विस्तार कर सकते हैं? –