[英]T-SQL Stored procedure, declaring variables within the exec
我正在嘗試使用T-SQL創建存儲過程以將變量插入表中。 使用我所知道的方法,您可以在存儲過程的創建中聲明變量,但是我相信可以將變量聲明為exec語句的一部分,以使插入動態化。 我已經在Google,Google和Google上搜索了,找不到任何支持此功能的信息。
這是我的示例代碼,它帶有靜態變量:
create procedure spInsert as
declare @insertValueOne varchar(5) = 'Test1'
declare @insertValueTwo varchar(5) = 'Test2'
declare @insertValueThree varchar(5) = 'Test3'
declare @insertValueFour varchar(5) = 'Test4'
begin
insert into testTable
(ValueOne, ValueTwo, ValueThree, ValueFour)
values
(@insertValueOne, @insertValueTwo, @insertValueThree, @insertValueFour)
end
exec spInsert
我要實現的情況是可以使用這樣的執行腳本,例如:
exec spInsert('Test1', 'Test2', 'Test3', 'Test4')
而不是在過程中創建靜態變量。 允許用戶執行存儲過程而不修改其內容。
這有意義嗎? 有任何想法嗎?
使用具有默認值的參數代替局部變量:
create procedure dbo.spInsert
@insertValueOne varchar(5) = 'Test1'
,@insertValueTwo varchar(5) = 'Test2'
,@insertValueThree varchar(5) = 'Test3'
,@insertValueFour varchar(5) = 'Test4'
AS
BEGIN
-- You can still use local variables
-- DECLARE @my_local_variable = UPPER(@insertValueOne);
INSERT INTO testTable(ValueOne, ValueTwo, ValueThree, ValueFour)
VALUES (@insertValueOne, @insertValueTwo, @insertValueThree, @insertValueFour)
END;
呼叫:
-- named parameters (good practice, self-documenting)
EXEC spInsert @insertValueOne = 'Test1', @insertValueTwo = 'BBB';
-- positional parameters(order is crucial)
EXEC spInsert 'Test1', 'Test2', 'Test3', 'Test4'
用sp
命名用戶定義的存儲過程不是最佳實踐。
我認為這看起來像我的解決方案
不,不是您的存儲過程不接受任何參數。
create procedure spInsert as
declare @insertValueOne varchar(5) = 'Test1'
declare @insertValueTwo varchar(5) = 'Test2'
declare @insertValueThree varchar(5) = 'Test3'
declare @insertValueFour varchar(5) = 'Test4'
begin
insert into testTable
(ValueOne, ValueTwo, ValueThree, ValueFour)
values
(@insertValueOne, @insertValueTwo, @insertValueThree, @insertValueFour)
end
希望對您有所幫助。
exec spInsert 'Test1', 'Test2', 'Test3', 'Test4'
你快到了。 您的代碼包含一些錯誤。 我的示例僅說明了使用存儲過程可以實現的部分功能。 有關更多信息,請參閱Microsoft的MSDN 幫助文檔 。
該示例使用臨時過程(名稱前面的哈希使其變為臨時)。 但是這些原則適用於常規SP。
SP
/* Declares a temp SP for testing.
* The SP has two parameters, each with a default value.
*/
CREATE PROCEDURE #TempExample
(
@ValueOne VARCHAR(50) = 'Default Value One',
@ValueTwo VARCHAR(50) = 'Default Value Two'
)
AS
SET NOCOUNT ON;
BEGIN
SELECT
@ValueOne AS ReturnedValueOne,
@ValueTwo AS ReturnedValueTwo
END
GO
我已包含SET NOCOUNT ON語句。 MSDN在最佳實踐部分中建議這樣做。
將SET NOCOUNT ON語句用作過程正文中的第一條語句。 即,將其放在AS關鍵字之后。 這將關閉執行任何SELECT,INSERT,UPDATE,MERGE和DELETE語句后SQL Server發回客戶端的消息。 通過消除這種不必要的網絡開銷,可以提高數據庫和應用程序的整體性能。
在示例中,我為每個參數指定了默認值,但這是可選的。 下面顯示了如何使用變量和硬編碼值調用此SP。
呼叫范例
/* We can declare varaiabels outside the SP
* to pass in values.
*/
DECLARE @ParamOne VARCHAR(50) = 'Passed Value One';
/* Calling the SP with params.
* You can use variables or hard coded values.
*/
EXECUTE #TempExample @ParamOne, 'Passed Value Two';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.