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变量的过程来创建这个过程。 –