2009-08-04 56 views
0

这个说法我在一个存储过程(其中搜索短语“reiseportal *”是一个参数)使用不带通配符的工作,因为我认识到:SQL查询链接索引服务器不会工件W通配符

DECLARE @strSQL NVARCHAR(MAX) 

SELECT @strSQL= 'SELECT FileName, path, size, vpath from "GRIP-SERVER"."Web2"..SCOPE() where contains 
('SELECT @[email protected] + CHAR(39) + CHAR(39)+ 'reiseportal*' + CHAR(39) + CHAR(39)+')' 

SELECT @strSQL='SELECT DISTINCT DOC.ID_Kandidat, IDXS.* FROM 
OPENQUERY([GRIP-SERVER],'+ CHAR(39) + @strSQL + CHAR(39) +') AS IDXS INNER JOIN 
tblK_Dokumente AS DOC 
ON DOC.Link = IDXS.[FileName] 
ORDER BY ID_Kandidat' 

EXEC sp_executesql @statement = @strSQL 

这些都是@strSQL变量的内容:

第一后选择:

select FileName, path, size, vpath from "GRIP-SERVER"."Web2"..SCOPE() where 
contains(''reiseportal*'') 

第二选择:

SELECT DISTINCT DOC.ID_Kandidat, IDXS.* FROM 
OPENQUERY([GRIP-SERVER],'select FileName, path, size, vpath from "GRIP-SERVER"."Web2"..SCOPE() where 
contains(''reiseportal*'')') AS IDXS INNER JOIN 
tblK_Dokumente AS DOC 
ON DOC.Link = IDXS.[FileName] 
ORDER BY ID_Kandidat' 

GRIP-SERVER是链接的索引服务器(= Microsoft Server 2003 - 我们的文件服务器)。

我不明白它...它返回结果与“reiseportals”,但不是“reiseportal *”或“reiseportal%”。你有什么提示吗?

非常感谢您的帮助,非常感谢!

回答

1

我自己找到答案。

问题不在于通配符,而在于字符串标记。索引服务器不使用撇号,而是使用引号。所以正确的SQL应该是这样的:

SELECT DISTINCT DOC.ID_Kandidat, IDXS.* FROM 
OPENQUERY([GRIP-SERVER],'select FileName, path, size, vpath from "GRIP-SERVER"."Web2"..SCOPE() where 
contains(''"reiseportal*"'')') AS IDXS INNER JOIN 
tblK_Dokumente AS DOC 
ON DOC.Link = IDXS.[FileName] 
ORDER BY ID_Kandidat