我不能为我的生活弄清楚这一点。我正在尝试实现以下SQL查询:
DECLARE @variable varchar(8000)
SELECT @variable = 'SELECT * FROM OPENQUERY("LinkedServerName", ''SELECT objectGUID FROM ''LDAP://bla1.bla2'' WHERE name = ''myName mySurname'' '')'
EXEC (@variable)
我似乎无法逃脱这个家伙
''LDAP://bla1.bla2''
我尝试了很多不同的选项:双引号,单引号,没有引号,斜线前的%符号......它不起作用。但是,它在不同格式的查询中与双引号完美配合,如下所示:
SELECT * FROM OpenQuery
(
"LinkedServerName", 'SELECT objectGUID FROM ''LDAP://bla1.bla2'' WHERE name =
''myName mySurname'' '
)
但是这种格式的查询对我不起作用,因为我想将其结果保存在变量中。
- 关于如何在第一个查询中转义域名的任何想法?
- 如果没有,关于如何保存打开的查询的任何想法都会导致第二个查询变量?
答案 0 :(得分:1)
我只想替换值:
DECLARE @sql varchar(8000);
SELECT @sql = '
SELECT *
FROM OPENQUERY("LinkedServerName",
''SELECT objectGUID FROM ''[var]'' WHERE name = ''myName mySurname'' ''
)';
SELECT @sql = REPLACE(@sql, '[var]', 'LDAP://bla1.bla2')
EXEC sp_executesql @sql;
我还建议您学会使用sp_executesql
。它比仅使用exec()
更强大。
答案 1 :(得分:0)
试试这个:
DECLARE @variable varchar(8000)
SELECT @variable = 'SELECT * FROM OPENQUERY("LinkedServerName", ''SELECT objectGUID FROM ''''LDAP://bla1.bla2'''' WHERE name = ''''myName mySurname'''' '')'
PRINT (@variable)