2011-09-27 55 views
7

我想通过脚本创建数据库后创建SQL Server登录。 登录对于主机是本地的,并且此脚本将在多个主机上运行。通过脚本使用变量创建SQL Server登录

我想要做的是:

USING MyDatabase 
CREATE MyUser FOR LOGIN USER <computer name>/MyUser 

什么我不知道该怎么做的是结合了计算机名称(例如Location0001。)这个说法。

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

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

登录看起来像这样对每一台机器:

Location0001\MyUser 
Location0002\MyUser 
Location0999\MyUser 

任何帮助将感激,谢谢。

编辑:我的基础上,接受的答案最终解决方案如下:

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

回答

7

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

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

set @username = 'testuser' 
set @cmd = ' 
    USE MyDatabase 
    CREATE USER MyUser FOR LOGIN '[email protected]@servername+'\'[email protected] 
PRINT @cmd 
EXEC (@cmd) 
+0

我没有想到使用内联SQL。谢谢,我不得不做一些语法修改,但这个概念确实起作用。 – Terry

+4

考虑使用sp_executesql而不是EXEC(UTE)。它允许参数化查询,从而消除SQL注入的可能性,并利用计划缓存中的计划重用。 – 2011-09-28 00:43:06

+2

此建议仅适用于默认实例。对于命名实例,“@@ servername”将返回“MACHINE \ INSTANCE”,因此CREATE USER将失败。您需要HOST_NAME(),如建议的OP,或者ServerProperty('MachineName'),这取决于您想要实现的目标。我知道这已经得到解答 - 我正在为那些通过网络搜索来到这里的人写信。 – Cozzamara