如果有一种方法可以使用 openrowset 查询 Azure SQL 数据库,有人可以帮助我,并且 SQL 身份验证帐户的密码字符串中包含“单引号”。我的陈述如下所示
(我从本地查询 Azure 数据库)
SELECT a.*
FROM OPENROWSET('SQLNCLI11', 'SERVER=sqlserver.database.windows.net,1433;DATABASE=testDB;Uid=admin;Pwd=Fj'C(D=JJ&'XE6vx};','select * from table1 with (nolock)')a
我尝试了以下解决方案
解决方案 1 - 动态 SQL
declare @string varchar(max)
set @string=
'SELECT a.*
FROM OPENROWSET(''SQLNCLI11'', ''SERVER=sqlserver.database.windows.net,1433;DATABASE=testDB;Uid=admin;Pwd="Fj'''+'C(D=JJ&'''+'XE6vx}";'',''select count(*) from dbo.table1 with (nolock)'')a'
exec (@string)
解决方案 2 - 将密码作为参数传入
declare @string varchar(max)
declare @pwd varchar(max)
set @pwd = 'Fj'''+'C(D=JJ&'''+'XE6vx}'
set @string=
'SELECT a.*
FROM OPENROWSET(''SQLNCLI11'', ''SERVER=sqlserver.database.windows.net,1433;DATABASE=testDB;Uid=admin;Pwd='+@pwd+';'',''select count(*) from dbo.table1 with (nolock)'')a'
exec (@string)
它们都导致相同的错误(指向密码)
消息 102,级别 15,状态 1,第 16 行“C”附近的语法不正确。
使用密码中没有任何“单引号”的 SQL 身份验证帐户绝对可以正常工作。
我可以轻松更改密码来解决此问题,但仍然想知道是否有解决此问题的方法。