अपनी स्वयं की संग्रहीत कार्यविधियाँ बनाएँ जो एक अस्थायी तालिका में / लोड को बचाती हैं।
MyVariableSave
MyVariableLoad
तब आप इसका उपयोग कर सकते हैं:
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)))
आउटपुट:
Test stored procedures for load/save of variables across GO statements:
- Set @MyVariable = 42
- GO statement resets all variables
- Get @MyVariable = 42
आप इनका उपयोग भी कर सकते हैं:
exec dbo.MyVariableList
exec dbo.MyVariableDeleteAll
का आउटपुट exec dbo.MyVariableList
:
Name Value
test 42
यह पता चलता है कि तालिका में सभी चर को सूचीबद्ध करने में सक्षम होना वास्तव में काफी उपयोगी है। इसलिए भले ही आप बाद में एक चर को लोड न करें, लेकिन डिबगिंग के उद्देश्यों के लिए यह बहुत अच्छा है कि एक ही जगह पर सब कुछ देखें।
यह एक ##
उपसर्ग के साथ एक अस्थायी तालिका का उपयोग करता है , इसलिए यह केवल GO कथन से बचने के लिए पर्याप्त है। इसका उपयोग किसी एक लिपि के भीतर किया जाना है।
और संग्रहीत कार्यविधियाँ:
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