您好,我试图弄清楚为什么在MSSQL中将兼容模式从80切换为100会破坏下面的功能?
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Express Edition with Advanced Services (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
这是我的功能:
GO ALTER FUNCTION [dbo].[GetRoot] ( @Param1 int ) RETURNS varchar(50) AS BEGIN DECLARE @ReturnValue varchar(50) with results as ( select parentouid,net_ouid from net_ou where net_ouid=@Param1 union all select t2.parentouid,t2.net_ouid from net_ou t2 inner join results t1 on t1.parentouid = t2.net_ouid where t2.parentouid <> t1.net_ouid ) select @ReturnValue = net_ou.displayname from NET_OU RIGHT OUTER JOIN results ON net_ou.net_ouid = results.ParentouID where results.parentouid=results.net_ouid RETURN @ReturnValue END
尝试在with前面加一个半冒号:
;with results as ( select parentouid,net_ouid from net_ou where net_ouid=@Param1 union all select t2.parentouid,t2.net_ouid from net_ou t2 inner join results t1 on t1.parentouid = t2.net_ouid where t2.parentouid <> t1.net_ouid )
给这篇文章读明白,为什么你需要做到这一点。尖刺:
但是,如果CTE不是批处理中的第一条语句,则必须在WITH关键字之前加上分号。作为一种最佳实践,我宁愿在所有CTE前面加上分号,以使这种一致的方法比记住我是否需要分号更容易。
就个人而言,我不会为 每个 CTE都这样做,但是如果这对您来说使事情变得容易,则不会造成任何伤害。