SQL中的转义域名字符

时间:2017-09-07 10:22:18

标签: sql sql-server

我不能为我的生活弄清楚这一点。我正在尝试实现以下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'' '
 )

但是这种格式的查询对我不起作用,因为我想将其结果保存在变量中。

- 关于如何在第一个查询中转义域名的任何想法?

- 如果没有,关于如何保存打开的查询的任何想法都会导致第二个查询变量?

2 个答案:

答案 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)