【发布时间】:2016-01-22 03:11:55
【问题描述】:
我正在使用带有 FileTable 的 SQL Server 2014 Express。我正在尝试根据文件是否包含基于飞机注册标记的特定关键字,从文件表(非结构化,pdf)中选择文件:
--SET VARIABLE FOR A REGISTRATION MARK
DECLARE @Reg nvarchar(10)
SET @Reg = 'PH-BGA'
--SET VARIABLE FOR MANUFACTURER OF REGISTRATION MARK
DECLARE @Manufacturer nvarchar(10) = NULL
SELECT FleetInfoKLM.Manufacturer FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg;
SET @Manufacturer = '""'
--SET VARIABLE FOR FAMILY OF REGISTRATION MARK
DECLARE @Family nvarchar(10) = NULL
SELECT FleetInfoKLM.Family FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg;
SET @Family = '""'
--SET VARIABLE FOR SERIES OF REGISTRATION MARK
DECLARE @Series nvarchar(10) = NULL
SELECT FleetInfoKLM.Series FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg;
SET @Series = '""'
--SELECT MAINTENANCE DOCUMENTS BASED ON VARIABLES FOR MANUFACTURER, FAMILY AND SERIES
SELECT MaintenanceDocumentation.name FROM MaintenanceDocumentation
WHERE ((@Manufacturer = '""') AND CONTAINS(file_stream, @Manufacturer))
AND ((@Family = '""') AND CONTAINS(file_stream, @Family))
AND ((@Series = '""') AND CONTAINS(file_stream, @Series))
如果没有 SET @VARIABLE = '""' 我收到错误消息 7645 Null 或空全文谓词。因此,我添加了 SET @VARIABLE = '""',因为在这个问题 7645 Null or empty full-text predicate 中找到了它作为解决方案。但是,现在结果集是空的(没有找到文档),而我知道应该有结果。变量设置正确,在本例中分别为波音、737 和 800。如果我将变量替换为字符串(例如“波音”)作为 CONTAINS 中的参数,我确实得到了预期的结果。
有人知道问题出在哪里吗?除了使用 SET @VARIABLE = '""' 避免错误之外,已经搜索了几个小时而没有结果。
【问题讨论】:
-
你为什么不在你的语句末尾使用分号
;? -
老实说,我什至没有考虑过,因为代码有效。显然不需要msdn.microsoft.com/en-us/library/ms177563.aspx,但我会添加它们。
-
您在此处发布代码并添加随机 SET 语句。 代码不起作用
-
您发布的链接也显示了大多数语句。它还说将在未来是必需的。
-
同意,这就是我现在添加它们的原因。我添加了 SET 语句,因为有类似问题的其他人使用它并且它有效。对我来说,我从一个错误转到一个空的结果集。这是进步,但显然不是我想要的。如果我将 CONTAINS 语句中的变量替换为字符串,它确实有效。我对此很陌生,而且我在网上找到的东西到目前为止还不能让它工作。
标签: sql-server