使用变量通过脚本创建SQL Server登录

Ter*_*rry 7 t-sql sql-server

我试图通过脚本创建数据库后创建SQL Server登录.登录是主机PC的本地登录,此脚本将在多个主机上运行.

我想做的是以下内容:

USING MyDatabase
CREATE MyUser FOR LOGIN USER <computer name>/MyUser 
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做是将计算机名称(例如Location0001)合并到此语句中.

登录确实存在于每台计算机上并且已经在SQL Server上列出,因为它可以访问其他数据库.

如果相关,脚本应该能够在SQL Server 2008上运行.

每台机器的登录名如下:

Location0001\MyUser
Location0002\MyUser
Location0999\MyUser
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很感激,谢谢.

编辑:根据接受的答案我的最终解决方案如下:

DECLARE @cmd VARCHAR(200)
SET @cmd = N'CREATE USER [MyUser] FOR LOGIN [' + HOST_NAME() + '\MyUser]'
EXEC (@cmd)
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以使用@@ servername属性获取计算机的名称: select @@servername

declare @cmd varchar(200), @username varchar(50)

set @username = 'testuser'
set @cmd = ' 
   USE MyDatabase
   CREATE USER MyUser FOR LOGIN '+@@servername+'\'+@username 
PRINT @cmd
EXEC (@cmd)
Run Code Online (Sandbox Code Playgroud)

  • 考虑使用sp_executesql而不是EXEC(UTE).它允许参数化查询,这消除了SQL注入的可能性,并利用了计划缓存中的计划重用. (4认同)
  • 此建议仅适用于默认实例.对于命名实例,`@@ servername`将返回'MACHINE\INSTANCE',因此CREATE USER将失败.你需要像我建议的'HOST_NAME()`,或'ServerProperty('MachineName')`,这取决于你想要实现的目标.我知道这已经得到了回答 - 我正在为那些从网上搜索到这里的人写信. (3认同)