0

我在 sproc 中使用的这个语句(其中搜索短语“reiseportal*”是一个参数)不适用于通配符,正如我所认识到的:

DECLARE @strSQL NVARCHAR(MAX)

SELECT @strSQL= 'SELECT FileName, path, size, vpath from "GRIP-SERVER"."Web2"..SCOPE() where contains
('SELECT @strSQL=@strSQL  + 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%”的结果。你对我有什么提示吗?

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

4

1 回答 1

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
于 2009-08-04T12:13:22.277 回答