Есть ли способ сделать константу переменной TSQL постоянной? - PullRequest
77 голосов
/ 25 августа 2008

Есть ли способ сделать константу переменной TSQL постоянной?

Ответы [ 12 ]

0 голосов
/ 03 декабря 2012

Лучший ответ от 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
0 голосов
/ 25 августа 2008

В литературе по базам данных нет понятия «создание константы». Константы существуют такими, какие они есть, и их часто называют ценностями. Можно объявить переменную и присвоить ей значение (константу). С схоластической точки зрения:

DECLARE @two INT
SET @two = 2

Здесь @two - переменная, а 2 - значение / константа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...