Лучший ответ от SQLMenace в соответствии с требованием, если это создает временную константу для использования в сценариях, то есть для нескольких операторов / пакетов GO.
Просто создайте процедуру в базе данных tempdb, тогда вы не окажете влияния на целевую базу данных.
Одним из практических примеров этого является сценарий создания базы данных, который записывает управляющее значение в конец сценария, содержащего версию логической схемы. В верхней части файла находятся некоторые комментарии с историей изменений и т. Д. Но на практике большинство разработчиков забудут прокрутить вниз и обновить версию схемы в нижней части файла.
Использование приведенного выше кода позволяет определить видимую константу версии схемы вверху, прежде чем сценарий базы данных (скопированный из функции создания сценариев SSMS) создаст базу данных, но будет использован в конце. Это прямо перед разработчиком рядом с историей изменений и другими комментариями, поэтому они, скорее всего, обновят его.
Например:
use tempdb
go
create function dbo.MySchemaVersion()
returns int
as
begin
return 123
end
go
use master
go
-- Big long database create script with multiple batches...
print 'Creating database schema version ' + CAST(tempdb.dbo.MySchemaVersion() as NVARCHAR) + '...'
go
-- ...
go
-- ...
go
use MyDatabase
go
-- Update schema version with constant at end (not normally possible as GO puts
-- local @variables out of scope)
insert MyConfigTable values ('SchemaVersion', tempdb.dbo.MySchemaVersion())
go
-- Clean-up
use tempdb
drop function MySchemaVersion
go