【发布时间】:2015-09-16 08:55:03
【问题描述】:
我有一个非常简单的 PowerShell 脚本,它将 sql server 登录添加到 db 角色。由于我将它用于 SQL 2008,因此我需要使用 sp_addrolemember 存储过程。
如果我像这样在管理工作室中使用 t-sql:
declare @dbrole varchar(100)
set @dbrole = 'db_owner'
declare @login varchar(100)
set @login = 'net1\vintida'
exec sp_addrolemember @rolename = @DBRole,
@membername = @login
然后就可以正常使用了
如果我使用这样的 PowerShell 脚本
$login = 'net1\vintida'
$DBrole = 'db_owner'
$Q3 = " exec sp_addrolemember @rolename = $DBRole,
@membername = $login "
Invoke-Sqlcmd -Query $Q3
然后它会抛出以下错误:
Invoke-Sqlcmd:“vintida”附近的语法不正确。附近的语法不正确 '\'。
但是,如果我像这样使用 powershell 脚本
$DBrole = 'db_owner'
$Q3 = "exec sp_addrolemember @rolename = $DBRole,
@membername = 'net1\vintida' "
Invoke-Sqlcmd -Query $Q3
效果很好
我不明白为什么当我使用变量 $login 将字符串 'net1\vintida' 传递到查询文本中时,它不喜欢 \,但我将相同的字符串硬编码到它工作的查询文本中
【问题讨论】:
标签: sql sql-server-2008 powershell