Geçici bir tabloya kaydeden / yükleyen kendi saklı yordamlarınızı oluşturun.
MyVariableSave
MyVariableLoad
O zaman bunu kullanabilirsiniz:
print('Test stored procedures for load/save of variables across GO statements:')
declare @MyVariable int = 42
exec dbo.MyVariableSave @Name = 'test', @Value=@MyVariable
print(' - Set @MyVariable = ' + CAST(@MyVariable AS VARCHAR(100)))
print(' - GO statement resets all variables')
GO -- This resets all variables including @MyVariable
declare @MyVariable int
exec dbo.MyVariableLoad 'test', @MyVariable output
print(' - Get @MyVariable = ' + CAST(@MyVariable AS VARCHAR(100)))
Çıktı:
Test stored procedures for load/save of variables across GO statements:
- Set @MyVariable = 42
- GO statement resets all variables
- Get @MyVariable = 42
Bunları da kullanabilirsiniz:
exec dbo.MyVariableList
exec dbo.MyVariableDeleteAll
Çıktı exec dbo.MyVariableList
:
Name Value
test 42
Bir tablodaki tüm değişkenleri listelemenin aslında oldukça yararlı olduğu ortaya çıktı. Dolayısıyla, bir değişkeni daha sonra yüklemeseniz bile, her şeyi tek bir yerde görmek hata ayıklama amaçları için harikadır.
Bu, ##
ön ekli geçici bir tablo kullanır , bu nedenle bir GO ifadesinden kurtulmak için yeterlidir. Tek bir komut dosyası içinde kullanılması amaçlanmıştır.
Ve saklanan prosedürler:
CREATE OR ALTER PROCEDURE MyVariableSave
@Name varchar(255),
@Value varchar(MAX)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS (select TOP 1 * from tempdb.sys.objects where name = '##VariableLoadSave')
BEGIN
DROP TABLE IF EXISTS
CREATE TABLE
(
Name varchar(255),
Value varchar(MAX)
)
END
UPDATE
IF @@ROWCOUNT = 0
INSERT INTO
END
GO
CREATE OR ALTER PROCEDURE MyVariableLoad
@Name varchar(255),
@Value varchar(MAX) OUT
WITH EXECUTE AS CALLER
AS
BEGIN
IF EXISTS (select TOP 1 * from tempdb.sys.objects where name = '##VariableLoadSave')
BEGIN
IF NOT EXISTS(SELECT TOP 1 * FROM
BEGIN
declare @ErrorMessage1 as varchar(200) = 'Error: cannot find saved variable to load: ' + @Name
raiserror(@ErrorMessage1, 20, -1) with log
END
SELECT @Value=CAST(Value AS varchar(MAX)) FROM
WHERE Name=@Name
END
ELSE
BEGIN
declare @ErrorMessage2 as varchar(200) = 'Error: cannot find saved variable to load: ' + @Name
raiserror(@ErrorMessage2, 20, -1) with log
END
END
GO
CREATE OR ALTER PROCEDURE MyVariableList
WITH EXECUTE AS CALLER
AS
BEGIN
IF EXISTS (select TOP 1 * from tempdb.sys.objects where name = '##VariableLoadSave')
BEGIN
SELECT * FROM
ORDER BY Name
END
END
GO
CREATE OR ALTER PROCEDURE MyVariableDeleteAll
WITH EXECUTE AS CALLER
AS
BEGIN
DROP TABLE IF EXISTS
CREATE TABLE
(
Name varchar(255),
Value varchar(MAX)
)
END