Это дубликатом вопрос один здесь: How to use CREATE LOGIN sql statement?Действительно ли можно создать логин SQL с помощью Dynamic SQL?
Я спрашиваю это снова, потому что я попробовал то, что предложил людям в ответах на вопрос выше, а также попробовал то, что в моем Murach SQL Server но это не работает. Я правильно выполняю этот сценарий или невозможно создать логины с динамическим SQL? Вот мой код:
USE MyGuitarShop
IF OBJECT_ID('Admin_For_Login') IS NOT NULL
DROP TABLE Admin_For_Login;
GO
SELECT FirstName, LastName INTO Admin_For_Login FROM Administrators;
DECLARE @FirstName varchar(50), @LastName varchar(50), @NewUser varchar(100), @ExecVar varchar(1000); --variable to replace login name should be a varchar
DECLARE Administrator_Loop_Cursor CURSOR
DYNAMIC
FOR
SELECT FirstName, LastName FROM Admin_For_Login;
OPEN Administrator_Loop_Cursor
FETCH NEXT FROM Administrator_Loop_Cursor INTO @FirstName, @LastName;
--PRINT @FirstName + @LastName;
SELECT @NewUser = @FirstName + @LastName;
--PRINT @NewUser + ' - this is NewUser';
WHILE @@FETCH_STATUS = 0
BEGIN
--FETCH NEXT FROM Administrator_Loop_Cursor INTO @FirstName, @LastName;
IF (@@FETCH_STATUS = 0)
BEGIN
SELECT @NewUser = @FirstName + @LastName;
PRINT @NewUser + ' - this is NewUser';
SET @ExecVar = 'CREATE LOGIN @NewUser WITH PASSWORD = ''temp'' MUST_CHANGE, ';
SET @ExecVar = @ExecVar + 'DEFAULT_DATABASE = MyGuitarShop;';
SET @ExecVar = @ExecVar + ' CREATE USER @NewUser; ';
SET @ExecVar = @ExecVar + 'ALTER ROLE OrderEntry ADD MEMBER @NewUser;';
EXEC (@ExecVar);
FETCH NEXT FROM Administrator_Loop_Cursor INTO @FirstName, @LastName;
END;
IF NOT(@@FETCH_STATUS = 0)
BREAK;
END;
CLOSE Administrator_Loop_Cursor;
DEALLOCATE Administrator_Loop_Cursor;
Спасибо!
Спасибо, используя quotename() работал! – SammyPayne
проблема не из-за котировки. Но вы не можете использовать переменную в CREATE LOGIN/USER. Вам необходимо объединить его, чтобы сформировать команду CREATE LOGIN. Использование quotename - гарантировать, что если у вас есть место в @NewUser, это не вызывает никаких проблем – Squirrel