**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我正在尝试编写一个查询,我打算在一个示例中存在的所有数据库上创建一个用户并将其添加到数据库角色,条件是如果角色或用户已经存在,则将传递命令。
这是我写的查询:
DECLARE @dbname VARCHAR(50)
DECLARE @statement NVARCHAR (max)
DECLARE db_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
-- CREATE LOGIN FOR DB AND ADD INTO ROLE --
IF NOT EXISTS (SELECT [name] FROM [sys].[database_principals]
WHERE [name] = 'db_view' AND [name] = 'silalahi')
--SELECT * FROM sys.database_principals
BEGIN
SELECT
@statement = 'use ' + @dbname + ';' +
'CREATE ROLE [db_view]' +
'CREATE USER [silalahi] FOR LOGIN [silalahi] ' +
'EXEC sp_addrolemember ''db_view'', ''silalahi''' +
'EXEC sp_addrolemember ''db_datareader'', ''silalahi''' +
'EXEC sp_addrolemember ''db_denydatawriter'', ''silalahi'''
EXEC sp_executesql @statement
END
FETCH NEXT FROM db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor
当我运行这个查询时,我得到一个错误:
“db_cursor”附近的语法不正确
有人能帮助我如何修复这个查询吗?
谢谢
1条答案
按热度按时间lf5gs5x21#
只需要在脚本的结尾使用END