0
問題: 我正在嘗試創建一個存儲過程,它使用作爲參數傳入的用戶名創建一個Login。沒有使用我在調用過程時傳入的參數。在存儲過程中正確使用輸入參數
我試過的東西: 我已經試過用exec dbo.proc_add_user 'TestLogin'
來調用我的程序。
我認爲用這種方式調用它會使用「TestLogin」代替@arg1
。
這裏是我試圖創建存儲過程/改變:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_add_user]
(
@arg1 varchar(255) = null
) AS
BEGIN
CREATE LOGIN [@arg1] WITH PASSWORD=N'password' MUST_CHANGE, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GRANT ALTER ANY LOGIN TO [@arg1]
GRANT CONNECT SQL TO [@arg1]
GRANT VIEW ANY DEFINITION TO [@arg1]
GRANT VIEW SERVER STATE TO [@arg1]
END
而不是創建一個名爲「TESTLOGIN」登錄的,它創建了一個名爲「@ ARG1」登錄。我也試着設置@arg1
名爲@userName
聲明的VARCHAR:
declare @userName varchar(255) = @arg1
BEGIN
CREATE LOGIN [@userName] WITH PASSWORD=N'password' ...
...
我得到這個方法相同的結果。我會盡快回答任何問題,謝謝。
好,你要使用動態SQL而不實際使其動態 – Lamak
你必須創建動態SQL和運行EXEC或sp_executesql的 –
謝謝你之前增加了一個需要空間。我將研究創建動態SQL過程。我通過查看一個類似於varchar變量的過程來創建這個過程。 –