2010-09-24 83 views
1

我试图在微软SQL运行下面的TSQL语句2008逃脱引号内引号TSQL字符串

DECLARE @tmpMessage nvarchar(max) 

SET @tmpMessage = 'select * from openquery(GLive,''select ID from Links WHERE [HREF] LIKE ''test'''')'; 

exec sp_executesql @tmpMessage 

上面的代码不工作,因为单引号前测试关闭周围的主要报价从链接第二个SELECT语句选择ID ....

是的,我已经把我的发言在第一串之前执行它,因为OPENQUERY功能不会让我做事端像

select * from openquery(GLive,'select ID from Links WHERE [Href] LIKE ''' + @Var + ''''') 

任何suggesstions将不胜感激。

在此先感谢。

回答

4

这里是我,每当我在OPENQUERY语句处理变量链接的服务器使用模板:

DECLARE @UniqueId int 
, @sql varchar(500) 
, @linkedserver varchar(30) 
, @statement varchar(600) 

SET @UniqueId = 2 

SET @linkedserver = 'LINKSERV' 
SET @sql = 'SELECT DummyFunction(''''' + CAST(@UniqueId AS VARCHAR(10))+ ''''') FROM DUAL' 
SET @statement = 'SELECT * FROM OPENQUERY(' + @linkedserver + ', ' 
SET @Statement = @Statement + '''' + @SQL + ''')' 
EXEC(@Statement) 
+0

是不错的主意,它拆分成2串后,由于它的工作原理 – 2010-09-24 21:45:51

0

你也可以尝试一下QUOTENAME命令。

+0

仅适用于以字符串<= 128个字符AFAIK。 – 2010-09-24 12:44:38

+0

还挺为我工作移除“[”和“]”的QUOTENAME功能添加,谢谢 – 2010-09-24 13:05:13