Sql server 在中使用变量的SQL Server 2014包含错误Msg 7645 Null或空全文谓词

Sql server 在中使用变量的SQL Server 2014包含错误Msg 7645 Null或空全文谓词,sql-server,Sql Server,我正在使用SQL Server 2014 Express和FileTable。我正在尝试从filetable非结构化pdf中选择文档,基于它们是否包含基于飞机注册标记的特定关键字: --SET VARIABLE FOR A REGISTRATION MARK DECLARE @Reg nvarchar(10) SET @Reg = 'PH-BGA' --SET VARIABLE FOR MANUFACTURER OF REGISTRATION MARK DECLARE @Manufacture

我正在使用SQL Server 2014 Express和FileTable。我正在尝试从filetable非结构化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='',我将得到错误Msg 7645 Null或空全文谓词。因此,我添加了SET@VARIABLE='',因为它是这个问题的解决方案。但是,现在结果集是空的,没有找到文档,而我知道应该有结果。变量设置正确,在本例中分别为波音737和800。如果我将变量替换为字符串,例如“Boeing”作为CONTAINS中的参数,我确实会得到预期的结果


有人知道问题出在哪里吗?已经在谷歌上搜索了几个小时,除了避免SET@VARIABLE=''的错误外,没有任何结果。

好的,我最终通过将SET语句改为SET@VARIABLE=SELECT来修复它:

--SET VARIABLE FOR A REGISTRATION MARK
DECLARE @Reg nvarchar(10);
SET @Reg = 'PH-BGO';

--SET VARIABLE FOR MANUFACTURER OF REGISTRATION MARK
DECLARE @Manufacturer nvarchar(100);
SET @Manufacturer = (SELECT FleetInfoKLM.Manufacturer FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg);

--SET VARIABLE FOR FAMILY OF REGISTRATION MARK
DECLARE @Family nvarchar(100);
SET @Family = (SELECT FleetInfoKLM.Family FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg);

--SET VARIABLE FOR SERIES OF REGISTRATION MARK
DECLARE @Series nvarchar(100);
SET @Series = (SELECT FleetInfoKLM.Series FROM FleetInfoKLM WHERE FleetInfoKLM.Reg = @Reg);

--SHOW LOCAL VARIABLES VALUES
SELECT @Manufacturer;
SELECT @Family;
SELECT @Series;

--SELECT MAINTENANCE DOCUMENTS BASED ON VARIABLES FOR MANUFACTURER, FAMILY AND SERIES
SELECT MaintenanceDocumentation.name FROM MaintenanceDocumentation
WHERE MaintenanceDocumentation.path_locator IS NOT NULL
    AND CONTAINS(file_stream, @Manufacturer)
    AND CONTAINS(file_stream, @Family)
    AND CONTAINS(file_stream, @Series);

不需要SET@variable=''语句。

为什么不使用分号;在你的陈述结束时?老实说,我甚至没有想到这一点,因为代码是有效的。显然这不是必需的,但我会添加它们。你在这里发布代码并添加随机集语句。代码不起作用。您发布的链接显示了大多数语句。它还说,未来将需要这些功能。同意,这就是我现在添加它们的原因。我添加了SET语句,因为其他有类似问题的人使用了它,并且它起了作用。对我来说,我从一个错误变成了一个空的结果集。这是进步,但显然不是我想要的。如果我将CONTAINS语句中的变量替换为字符串,它就可以工作。我是个新手,在网上找到的东西到目前为止还不能让它工作。