При использовании внутренних (системных) хранимых процедур и функций SQL Server (sp_rename
, sp_help
, OBJECT_ID
, ...) нет необходимости удалять или добавлять разделители и квалификаторы ('[' and '] 'или имя схемы по умолчанию (например,' dbo '), потому что эти функции анализируют имена идентификаторов и выводят фактическое имя.Также есть некоторые ситуации, в которых вам необходимо использовать разделители (когда они не являются обычными идентификаторами . См. идентификаторы ).
Например, при переименовании dbo.MyTable
вdbo.NewTable
, все эти команды действительны:
sp_rename 'dbo.MyTable', 'NewTable'
sp_rename '[dbo].MyTable', 'NewTable'
sp_rename 'MyTable', 'NewTable'
sp_rename '[dbo].[MyTable]', 'NewTable'
Но обратите внимание, что новое имя, указанное в качестве второго параметра sp_rename
, не будет проанализировано, и хранимая процедура установитимя объекта точно , как вы указали:
sp_rename 'dbo.MyTable', '[dbo].NewTable'
Это изменит MyTable
на [dbo].NewTable
, и ваше имя таблицы будет точно dbo.[dbo].NewTable
!Доступ к этой новой таблице с таким именем немного сложен:
sp_rename 'dbo."[dbo].NewTable"', 'OldTableName'
Но при доступе к именам объектов в системных таблицах SQL Server (например, sys.table
, sys.columns
, ...) вы не следует использовать разделители и квалификаторы, поскольку идентификаторы в этих таблицах хранятся в виде символьных строк:
select * from sys.columns where object_id = OBJECT_ID('dbo.Orders') and [name]='OrderID'
OBJECT_ID()
является системной функцией и анализирует имя объекта, но OrderID
следуетуказывать в качестве точного имени столбца (регистр без учета ).