2017-09-07 46 views
1

我不能爲我的生活弄清楚這一點。我想實現下面的SQL查詢:在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

試試這個:

DECLARE @variable varchar(8000) 
    SELECT @variable = 'SELECT * FROM OPENQUERY("LinkedServerName", ''SELECT objectGUID FROM ''''LDAP://bla1.bla2'''' WHERE name = ''''myName mySurname'''' '')' 
    PRINT (@variable) 
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()更強大。