Проблема: Я пытаюсь создать хранимая процедура, которая создает 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
заявленного VARCHAR имени @userName
:
declare @userName varchar(255) = @arg1
BEGIN
CREATE LOGIN [@userName] WITH PASSWORD=N'password' ...
...
я получить те же результаты с помощью этого метода. Спасибо, я отвечу на любые вопросы как можно быстрее.
хорошо, вы пытаетесь использовать динамический SQL, фактически делает его динамичным – Lamak
Вы должны создать динамический SQL и запустить Exec или sp_executesql –
Спасибо. Я буду исследовать создание динамических процедур SQL. Я создавал эту процедуру, просматривая аналогичную процедуру, которая проходит в переменной varchar. –