Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос о наименованиях  [new]
kalimba
Member

Откуда:
Сообщений: 297
Здравствуйте, подскажите пожалуйста следующие вещи.. Насколько я понял с введением DEFAULT_SCHEMA в MS SQL 2005 прямая необходимость писать имя схема отпала, но является хорошим тоном. Так ли это? Второй вопрос про названия хранимых процедур. Я так понял что нельзя писать название, начинающееся с "sp_", чтобы SQL Server не искал процедуру в системных, это так же осталось? Вообще хотелось бы почитать на эту тему актуальную информацию (По 2008R2-2012). Также вопрос в вдогонку - если БД больше 3х стоит ли везде писать название БД перед схемой в запросах и в хранимых процедурах? Спасибо всем заранее)
27 дек 12, 17:08    [13696480]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о наименованиях  [new]
Гость333
Member

Откуда:
Сообщений: 3683
kalimba
если БД больше 3х стоит ли везде писать название БД перед схемой в запросах и в хранимых процедурах?

Представьте, что вы везде написали название БД перед схемой. А потом вам понадобилось на том же сервере развернуть БД для тестов и назвать её БД_тест. Ваши действия?
27 дек 12, 17:21    [13696552]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о наименованиях  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
kalimba
Также вопрос в вдогонку - если БД больше 3х стоит ли везде писать название БД перед схемой в запросах и в хранимых процедурах? Спасибо всем заранее)
Не стоит, даже если меньше трёх.

Используйте синонимы для обращения к другим БД, тогда при необходимости развернуть ещё один экземпляр базы достаточно будет только переопределить синонимы.
27 дек 12, 17:50    [13696686]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о наименованиях  [new]
Гость333
Member

Откуда:
Сообщений: 3683
kalimba
Насколько я понял с введением DEFAULT_SCHEMA в MS SQL 2005 прямая необходимость писать имя схема отпала, но является хорошим тоном. Так ли это?

Не очень понятно, что вы имеете в виду под "прямой необходимостью". Можете писать и в MSSQL 2000 одно имя объекта без схемы, если хотите.

Актуальная информация, например, вот (SQL2012): http://msdn.microsoft.com/ru-ru/library/ms177563.aspx
Синтаксические обозначения в Transact-SQL (Transact-SQL)
Примечание

Чтобы избежать ошибок разрешения имен, при указании объекта области схемы рекомендуется указать имя схемы.

Вообще указание схемы перед именем объекта несколько ускоряет поиск этого объекта движком СУБД. Правда, можно ли это как-то заметить на практике, я не знаю.

Ещё один нюанс — если вы создаёте функцию или view с указанием WITH SCHEMABINDING, то вы обязаны обращаться ко всем объектам по two-part name (Схема.Объект). За подробностями — в документацию по CREATE VIEW и CREATE FUNCTION.

kalimba
Я так понял что нельзя писать название, начинающееся с "sp_", чтобы SQL Server не искал процедуру в системных, это так же осталось?

Не то чтобы нельзя, а крайне нежелательно. Например, если имя вашей ХП совпадёт с именем системной ХП, то можно получить такое поведение:
use tempdb;
go
create procedure dbo.sp_help
as select 1;
go
-- даже если указать имя БД, всё равно вызовется системная ХП
exec tempdb.dbo.sp_help;
go
-- а здесь удалится именно наша ХП, а системная останется
drop procedure dbo.sp_help;
go


Актуальная информация есть тут (SQL2012): http://msdn.microsoft.com/ru-ru/library/ms187926.aspx
CREATE PROCEDURE (Transact-SQL)
При задании имен для процедур не следует пользоваться префиксом sp_.Этим префиксом в SQL Server обозначаются системные процедуры.Использование этого префикса может нарушить работу кода приложения, если обнаружится системная процедура с таким же именем.
27 дек 12, 18:37    [13696860]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о наименованиях  [new]
kalimba
Member

Откуда:
Сообщений: 297
Гость333
Представьте, что вы везде написали название БД перед схемой. А потом вам понадобилось на том же сервере развернуть БД для тестов и назвать её БД_тест. Ваши действия?
Вот об этом не думал, спасибо)

Гость333
Не очень понятно, что вы имеете в виду под "прямой необходимостью". Можете писать и в MSSQL 2000 одно имя объекта без схемы, если хотите.

Актуальная информация, например, вот (SQL2012): http://msdn.microsoft.com/ru-ru/library/ms177563.aspx
В SQL Server 2000 если не указано имя схемы, то оптимизатор запросов подставлял имя пользователя.

Гость333
Вообще указание схемы перед именем объекта несколько ускоряет поиск этого объекта движком СУБД. Правда, можно ли это как-то заметить на практике, я не знаю.
Вот именно об этом и хотелось бы почитать)

Гость333
Ещё один нюанс — если вы создаёте функцию или view с указанием WITH SCHEMABINDING, то вы обязаны обращаться ко всем объектам по two-part name (Схема.Объект). За подробностями — в документацию по CREATE VIEW и CREATE FUNCTION.
Спасибо, про функции и вьюшки знаю.

Гость333
Не то чтобы нельзя, а крайне нежелательно. Например, если имя вашей ХП совпадёт с именем системной ХП, то можно получить такое поведение
Спасибо за прояснение ситуации)
27 дек 12, 18:55    [13696918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить