Я видел несколько шаблонов, используемых для «преодоления» отсутствия констант в SQL Server, но ни один из них, похоже, не удовлетворяет требованиям производительности и удобочитаемости/ремонтопригодности.Лучший шаблон для констант в SQL?
В приведенном ниже примере, если предположить, что мы имеем целостную «статус» классификации на нашем столе, варианты кажутся:
- Просто жесткий код его, и, возможно, просто «комментарий» статус
-- StatusId 87 = Loaded
SELECT ... FROM [Table] WHERE StatusId = 87;
- Использование таблицы поиска для состояний, а затем присоединение к этому т чтобы предложение
WHERE
ссылалось на дружеское имя.
подзапрос:
SELECT ...
FROM [Table]
WHERE
StatusId = (SELECT StatusId FROM TableStatus WHERE StatusName = 'Loaded');
или присоединился к
SELECT ...
FROM [Table] t INNER JOIN TableStatus ts On t.StatusId = ts.StatusId
WHERE ts.StatusName = 'Loaded';
- кучу определенных констант, которые возвращают скалярной ОДС, а именно
CREATE Function LoadedStatus()
RETURNS INT
AS
BEGIN
RETURN 87
END;
, а затем
SELECT ... FROM [Table] WHERE StatusId = LoadedStatus();
(ИМО это вызывает большое загрязнение в базе данных - это может быть хорошо в пакете оберткой Oracle)
- И аналогичные шаблоны с табличными значениями, содержащими константы со значениями в виде строк или столбцов, ч
CROSS APPLIED
назад до[Table]
Как другие пользователи SO решили эту общую проблему?
Редактировать: Bounty - У кого-нибудь есть метод наилучшей практики для поддержания $ (переменных) в сценариях DBProj DDL/Schema в соответствии с ответом и комментариями Remus?
Спасибо - мы используем DBPRO, и это привело меня к http://blogs.msdn.com/b/gertd/archive/2007/01/08/variables-to-the-rescue.aspx – StuartLC
К сожалению, DBPRO не принять подстановку $ (variable) в * каждый * исходный .sql-файл, только в файлах сценария .sql (сценарий запускается после развертывания схемы). Было бы здорово, если бы вы могли использовать переменные в определении процедур ... –
Спасибо Remus - если мы сможем обойти это ограничение, это было бы идеальным решением IMHO. Я добавил щедрость;) – StuartLC