通过脚本使用变量创建SQL Server登录
问题描述:
我想通过脚本创建数据库后创建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)
答
您可以使用@@ 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)
我没有想到使用内联SQL。谢谢,我不得不做一些语法修改,但这个概念确实起作用。 – Terry
考虑使用sp_executesql而不是EXEC(UTE)。它允许参数化查询,从而消除SQL注入的可能性,并利用计划缓存中的计划重用。 – 2011-09-28 00:43:06
此建议仅适用于默认实例。对于命名实例,“@@ servername”将返回“MACHINE \ INSTANCE”,因此CREATE USER将失败。您需要HOST_NAME(),如建议的OP,或者ServerProperty('MachineName'),这取决于您想要实现的目标。我知道这已经得到解答 - 我正在为那些通过网络搜索来到这里的人写信。 – Cozzamara