Обычно я использую таблицу метаданных для этого типа функциональности. Пример кода ниже дает вам прототип для таблицы метаданных. Пользователь будет выполнять процедуру [utility]. [Set__metadata], чтобы установить значение, а затем все ваши скрипты будут вызывать встроенную функцию для получения значения. С другой стороны, вы могли бы «установить» множество значений метаданных и просто иметь одну переменную для установки в верхней части каждого сценария, чтобы пользователь мог ввести то, что искали.
Дайте мне знать, если у вас есть вопросы. Вы обнаружите, что это очень полезная конструкция, позволяющая избежать жестких констант кодирования в вашем коде (для которых требуется перестроение / повторное развертывание кода), легко изменять значения, где бы они ни встречались в вашем коде, и давать простые, легкие запомнить имена для этих значений. Я обычно использую "category.class.type". Вы, вероятно, должны использовать некоторые стандартизированные соглашения об именах. Я избегаю прописных букв из-за возможной ошибки в регистре (компоненты .NET избирательно учитывают регистр) Но используйте соглашение об именах, которое имеет смысл для вас.
Вы можете также решить добавить представление или функцию «список», чтобы вы или другое лицо могли легко увидеть все доступные значения метаданных.
use [test];
go
if schema_id(N'utility') is null
execute (N'create schema utility');
go
if object_id(N'[utility].[metadata]', N'U') is not null
drop table [utility].[metadata];
go
create table [utility].[metadata]
(
[key] [nvarchar](256)
, [value] [nvarchar](256)
);
go
if object_id(N'[utility].[set__metadata]', N'P') is not null
drop procedure [utility].[set__metadata];
go
create procedure [utility].[set__metadata] @key [nvarchar](256)
, @value [nvarchar](256)
as
begin
merge into [utility].[metadata] as [target]
using (values(@key
, @value)) as [source] ([key], [value])
on [source].[key] = [target].[key]
when not matched then
insert ([key]
, [value])
values ([key]
, [value])
when matched then
update set [target].[key] = [source].[key];
end;
go
if object_id(N'[utility].[get__metadata]', N'FN') is not null
drop function [utility].[get__metadata];
go
create function [utility].[get__metadata] (@key [nvarchar](450))
returns [nvarchar](256)
as
begin
declare @value [nvarchar](max)
select @value = [value]
from [utility].[metadata]
where [key] = @key;
return @value;
end;
GO
execute [utility].[set__metadata]
@key = N'region.southwest.texas'
, @value=N'hot and humid';
go
execute [utility].[set__metadata]
@key = N'region.pacific_northwest.seattle'
, @value=N'cold and rainy';
go
select [utility].[get__metadata](N'region.southwest.texas');
go
select [utility].[get__metadata](N'region.pacific_northwest.seattle');
go