बस क्यों यह एक उत्पादन डेटाबेस मैं mylittlesql के माध्यम से ही पहुंचा जा सकता है पर हो रहा था पता लगाने की कोशिश अभी तक भी काफी समय बिताया। समस्या को पुन: उत्पन्न नहीं कर सका लेकिन इस स्क्रिप्ट को sp_rename के बिट्स से बनाया गया ताकि जब अगली बार ऐसा हो जाए तो मैं वास्तव में क्यों पता लगा सकता हूं। हाँ अधिक है, लेकिन किसी और की मदद कर सकता है।
यदि आप किसी भी तरह से sys.columns में संग्रहीत वास्तविक कॉलम नाम में '[' या ']' प्राप्त करने का प्रबंधन करते हैं, तो? (? 'Nvarchar' आपके कॉलम नाम के रूप में ????) कोई समस्या है। PARSENAME [] के साथ सामना नहीं करता है और शून्य देता है, इसलिए sp_rename काम नहीं करेगा।
यह केवल मदद मिलेगी त्रुटि कोड 15248 है जो जहां मैं इस समस्या आ रही के साथ 'कॉलम' मामले के लिए समस्या का निदान:
declare @objname nvarchar(1035) = N'dbo.EducationTypes.nvarchar' -- input to sp_rename
declare @newname sysname = N'EducationTypeTitle' -- input to sp_rename
declare @UnqualOldName sysname,
@QualName1 sysname,
@QualName2 sysname,
@QualName3 sysname,
@OwnAndObjName nvarchar(517),
@SchemaAndTypeName nvarchar(517),
@objid int,
@xtype nchar(2),
@colid int,
@retcode int
select @UnqualOldName = parsename(@objname, 1),
@QualName1 = parsename(@objname, 2),
@QualName2 = parsename(@objname, 3),
@QualName3 = parsename(@objname, 4)
print 'Old Object Name = ''' + convert(varchar,isnull(@UnqualOldName ,'')) + ''''
-- checks that parsename is getting the right name out of your @objname parameter
print 'Table name:'
if @QualName2 is not null
begin
print QuoteName(@QualName2) +'.'+ QuoteName(@QualName1)
select @objid = object_id(QuoteName(@QualName2) +'.'+ QuoteName(@QualName1))
end
else
begin
print QuoteName(@QualName1)
select @objid = object_id(QuoteName(@QualName1))
end
-- check if table is found ok
print 'Table Object ID = ''' + convert(varchar,isnull(@objid ,-1)) + ''''
select @xtype = type from sys.objects where object_id = @objid
print '@xtype = ''' + convert(varchar,isnull(@xtype,'')) + ''' (U or V?)'
if (@xtype in ('U','V'))
begin
print 'select @colid = column_id from sys.columns where object_id = ' +
convert(varchar,isnull(@objid,0)) + ' and name = ''' +
@UnqualOldName + ''''
select * from sys.columns where object_id = @objid -- and name = @UnqualOldName
select @colid = column_id from sys.columns
where object_id = @objid and name = @UnqualOldName
print 'Column ID = ''' + convert(varchar,isnull(@colid,-1)) + ''''
end
हो जाएगा ताकि उत्पादन संदेश टैब में कुछ उपयोगी संदेश (की एसएसएमएस या जो भी आप उपयोग कर रहे हैं) और परिणाम टैब में तालिका फ़ील्ड।
शुभकामनाएं।
और नए नाम पर ब्रैकेट को बाहर निकालें (जैसा आपने किया है), अन्यथा वे नाम का हिस्सा बन जाते हैं – Savage