【发布时间】:2013-06-11 14:55:07
【问题描述】:
我有一个系统用户表,每个用户都需要一个系统用来访问数据库的自己的数据库用户(不是我的想法..)。系统有自己的登录。 这给我们正在测试的 SQL AlwaysOn 分布式服务器设置带来了问题,因为用户不会在数据库之间同步。因此,虽然系统创建了数据库用户,但它们不会传播到辅助节点,并且当发生故障转移时,这些用户无法登录。
这就是我想要编写一个从数据库中的表创建数据库用户的脚本的理由。那么,为什么以下工作不起作用,我怎样才能使它起作用?
DECLARE @foo VARCHAR(250)
SET @foo = (SELECT USER_NAME FROM USER_TABLE WHERE USER_ID = 1337)
CREATE USER @foo
目前我在“@foo”附近的语法不正确
【问题讨论】:
-
为什么不起作用?你遇到了什么错误?
-
你不能像这样组合变量和命令。 SQL 不会用它的值替换
@foo,但会尝试创建一个名为@foo的用户(这是非法名称)。您应该使用动态 sql 来实现这一点。 Dave K 刚刚发布了答案。 -
或者,您能否将所有这些用户放在一个 AD 组中,将该组 一次 添加到辅助组并完成?
-
Ben 真是个好主意,但在我们的特定情况下不起作用,因为用户帐户是由某个软件生成的 SQL 身份验证帐户。我们正在考虑使用包含的数据库。
标签: sql sql-server tsql sql-server-2012 alwayson