【发布时间】:2014-01-01 02:55:54
【问题描述】:
我在 SQL Server 2005 中有以下查询,它运行良好:
DECLARE @venuename NVARCHAR(100)
DECLARE @town NVARCHAR(100)
SET @venuename = NULL -- normally these are parameters in the stored proc.
SET @town = 'London'
SELECT COUNT(*) FROM dbo.Venue
WHERE
(@VenueName IS NULL OR CONTAINS((Venue.VenueName), @VenueName))
AND
(@Town IS NULL OR Town LIKE @Town + '%')
当为参数传递空值时,它使用短路(实际 SP 中的参数比我的示例中显示的要多)。
但是在升级到 SQL 2012 后,使用为 @VenueName 传递的 NULL 运行此查询失败,并出现错误“Null or empty full-text predicate”,因为 SQL Server 似乎正在运行(或评估) @VenueName 的 CONTAINS 语句,即使 @VenueName 设置为 NULL。
有没有办法在 2012 年使用短路,或者这不再可能?我讨厌不得不重写我所有的 SP,因为多年来我们已经在跨多个项目的数十个存储过程中使用了这种技术。
【问题讨论】:
标签: sql sql-server tsql stored-procedures sql-server-2012