gpt4 book ai didi

sql-server - 我可以在 SQL Server 数据库中使用带有可能点的 varchar 类型的变量吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:39:08 24 4
gpt4 key购买 nike

我正在创建一个过程来将用户登录添加到特定数据库。当一个用户被插入我的数据库时,我在触发器中调用这个过程(我想在我的站点和访问数据库时为每个用户设置不同的登录名)。

这是我的触发器:

ALTER TRIGGER [dbo].[sys_users_insert]
ON [dbo].[sys_users]
AFTER INSERT
AS
BEGIN
DECLARE @USERNAME varchar(MAX)

SELECT @USERNAME = INSERTED.username
FROM INSERTED

EXEC CreateUser @USERNAME
END

CreateUser 是我在数据库中创建登录的过程。该程序正在运行。当我从查询编辑器调用它时:

EXEC CreateUser 'patricia.santos'

用户创建成功。但是当我在表中插入一个用户并且触发器运行时,用户既没有创建也没有插入到表中。而且我发现,如果我在用户名中插入一个没有点的用户,一切都会好起来的。所以我相信是带点的东西,但我想知道是否有一些解决方法来接受带点的用户名。

更新

这是我在数据库中创建登录的过程:

USE mydatabase
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[CreateUser]
@USERNAME AS VARCHAR(MAX) = ''
AS
BEGIN

declare @sql nvarchar(MAX)

If NOT EXISTS(select loginname from master.dbo.syslogins where name = @USERNAME)
BEGIN

set @sql = 'CREATE LOGIN ' + @USERNAME +
' WITH
PASSWORD = ''something'',
CHECK_POLICY = OFF'

exec(@sql)

set @sql = 'ALTER SERVER ROLE sysadmin ADD MEMBER ' + @username

exec(@sql)

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = @USERNAME)
BEGIN

-- Creates a database user for the login created above.
set @sql = 'CREATE USER [' + @USERNAME + '] FOR LOGIN [' + @USERNAME + ']'

exec(@sql)

EXEC sp_addrolemember 'db_owner', @USERNAME
END
END

END

谢谢你:)

最佳答案

我认为问题可能与您的 CreateUser 过程有关。确保“CREATE USER”子句和 ALTER SERVER ROLE 子句将用户名括在方括号中。请参阅下面的更新程序:

    SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[CreateUser]
@USERNAME AS VARCHAR(MAX) = ''
AS
BEGIN

declare @sql nvarchar(MAX)

If NOT EXISTS(select loginname from master.dbo.syslogins where name = @USERNAME)
BEGIN

set @sql = 'CREATE LOGIN [' + @USERNAME + '] ' +
' WITH
PASSWORD = ''something'',
CHECK_POLICY = OFF'

exec(@sql)

set @sql = 'ALTER SERVER ROLE sysadmin ADD MEMBER [' + @username + ']'

exec(@sql)

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = @USERNAME)
BEGIN

-- Creates a database user for the login created above.
set @sql = 'CREATE USER [' + @USERNAME + '] FOR LOGIN [' + @USERNAME + ']'

exec(@sql)

EXEC sp_addrolemember 'db_owner', @USERNAME
END
END

END

如果这有帮助,请告诉我。

关于sql-server - 我可以在 SQL Server 数据库中使用带有可能点的 varchar 类型的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com