はただ、これは私がmylittlesql経由でのみアクセスすることができ、本番データベース上で起こっていた理由を理解しようとあまりにも多くの時間を費やしました。問題を再現できませんでしたが、sp_renameのビットからこのスクリプトを作成したので、次回に起こったときに正確に理由を見つけることができます。はい、残酷ですが、他の誰かを助けるかもしれません。
sys.columnsに格納されている実際のカラム名に '['または ']'を(カラム名として? 'nvarchar')取得することは、何とかして問題があります。 PARSENAMEは[]に対処せず、nullを返します。したがって、sp_renameは機能しません。 [メッセージ]タブでいくつかの有用なメッセージ(のこの意志出力
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
:
これは私がこの問題を持っておく場所であるエラーコード15248と「列」場合の問題を診断するのに役立ちますSSMSなど)と[結果]タブの表のフィールドに表示されます。
幸運。
新しい名前の角括弧を除外します(以前のとおり)。そうでない場合は名前の一部になります – Savage