это проблема в функции sp_rename или в самом сервере sql? - PullRequest
3 голосов
/ 29 марта 2010

При переименовании имени столбца квадратная скобка включается в имя столбца, что я считаю ошибкой, Вот пример кода,

 create table [TestTable]

(TestColumnName nvarchar(30))

select TestColumnName from TestTable

sp_rename '[TestTable].[TestColumnName]', '[RenamedColumnName]', 'Column'

select [RenamedColumnName] from TestTable -- does not work "Invalid column name 'RenamedColumnName'."

select RenamedColumnName from TestTable -- does not work "Invalid column name 'RenamedColumnName'."

select * from [TestTable]  -- works fine!!!

Ошибка здесь заключается в том, что переименование столбца включает квадратные скобки , я обнаружил this , который говорит, что «первый символ должен быть одним из следующих ", но" [ ", по-видимому, не включен в список, есть ли проблема с sp_rename или самим сервером sql ?, так как это позволяет изменять имя столбца, чтобы начать с квадратная скобка.

Ответы [ 5 ]

5 голосов
/ 29 марта 2010

Столбец в вашем коде был переименован в столбец, который фактически содержит [] - для запроса этого столбца вам нужно будет использовать

SELECT [[RenamedColumnName]]] FROM TestTable

] - это идентификатор с разделителями, поэтому вы должны его избежать. Для] это означает дополнительное] для каждого, используемого в имени.

4 голосов
/ 16 декабря 2010

Если вы хотите это исправить, вы можете сделать это:

IF EXISTS(SELECT * FROM sys.columns where name ='[MyColumn]' AND [object_id]=OBJECT_ID('[MyTable]'))
BEGIN
EXEC sp_rename 'MyTable.[[MyColumn]]]', 'MyColumn', 'COLUMN';
END

Не спрашивайте меня, почему это работает, просто работает.

1 голос
/ 29 марта 2010

Это не ошибка, поскольку «[» и «]» являются допустимыми символами в имени столбца. sp_rename должен работать, получая точное имя столбца, которое вы хотите использовать - в конце концов, как он узнает, действительно ли вы хотите столбец с именем «[MyColumnWithBrackets]» или «MyColumnWithBrackets». Следовательно, если вы предоставляете имя, оно обрабатывается буквально и не требует от вас заключать (например,) имена столбцов с пробелами в скобках

1 голос
/ 29 марта 2010

Ошибка данных !!!

Это не

sp_rename '[TestTable].[TestColumnName]', '[RenamedColumnName]', 'Column'

Так и должно быть

sp_rename '[TestTable].[TestColumnName]', 'RenamedColumnName', 'Column'

тогда

select [RenamedColumnName] from TestTable -- works fine!!!

select RenamedColumnName from TestTable -- works fine!!!

select * from [TestTable]  -- works fine!!!

Несмотря на то, что имя нового столбца содержит пробел, такой как «Переименовано имя столбца», НЕ НУЖНО использовать квадратные скобки в

0 голосов
/ 29 марта 2010

квадратные скобки используются для обозначения границ имен столбцов. Таким образом, вы можете включить зарезервированные слова, пробелы, одинарные кавычки и т. Д. В имена столбцов, и скрипт не завершится ошибкой.

sp_rename: http://msdn.microsoft.com/en-us/library/aa238878(SQL.80).aspx

от BOL: этот пример переименовывает заголовок контакта в клиенте таблица к названию: EXEC sp_rename 'клиенты. [название контакта]', 'название', 'COLUMN'

попробуйте это:

sp_rename 'TestTable.TestColumnName', 'RenamedColumnName', 'Column'

так как вы передаете строки в процедуре, вам не нужны квадратные скобки "[", "]"

вы можете использовать "[", "]" в первом параметре, но если вы используете их во втором параметре, они станут частью фактического имени столбца:

create table [TestTable2]([Test ColumnName] nvarchar(30))
exec sp_help testtable2
exec sp_rename 'dbo.TestTable2.[Test ColumnName]', 'Renamed ColumnName', 'Column'
exec sp_help testtable2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...