version
テーブルを使用してデータベースを特定のタイプの瞬間に移動できるプロシージャを作成する必要があります。たとえば、バージョン1からバージョン10に、またはその逆に移動します。問題は、私がこの章でかなりぼやけているということです、そして学校のコースはそれについてほとんど何もありません。インターネットを使ってソリューションを構築しようとしましたが、どういうわけか行き詰まりました。私が間違っていることを理解するのを手伝ってください。
テーブルバージョン、1列、タイプint
クエリ
create procedure [dbo].[goto_vs] (
@vs int
)
as
begin
declare @current_vs int, @counter int;
declare @sqlquery nvarchar(50); --query to modify
declare @sqlsp nvarchar(30);
declare @sqlversion nvarchar(3);
declare @sqlreverse nvarchar(10);
--get the current version from table
select @current_vs=version from dbo.version;
--checking for valid version
if (@current_vs = @vs) begin
print('The database is already at this version...')
return
end
else begin
if (@vs > 5) begin
print('Setting the version of databse to last one...')
set @vs = 5
end
else begin
if (@vs < 0) begin
print('Setting the database to default...')
set @vs = 0
end
end
end
--setting up the string for exec
set @sqlsp = 'exec sp_create_table_awards'
--check if we go further or earlier in time
print('Changing database version...')
if (@vs > @current_vs) begin
set @sqlreverse = ''
goto upgrading
end
else begin
set @sqlreverse = 'undo_create_awards'
goto downgrading
end
--upgrading code
upgrading:
set @counter = @current_vs + 1
while (@counter <= @vs) begin
set @sqlquery = @sqlsp + cast(@counter as nvarchar(2)) + @sqlreverse
print(@sqlquery)
exec sp_executeSql @sqlquery
set @counter = @counter + 1
end
goto ending
downgrading:
set @counter = @current_vs
while (@counter > @vs) begin
set @sqlquery = @sqlsp + cast(@counter as nvarchar(2)) + @sqlreverse
print(@sqlquery)
exec sp_executeSql @sqlquery
set @counter = @counter - 1
end
goto ending
ending:
update dbo.version set version=@vs
print('Database version changed...')
end