日期:2014-05-18  浏览次数:20563 次

sql with后只能跟select关键字吗?
SQL code

  @zzxbg       bit = 1
AS
BEGIN
SET NOCOUNT ON;
    WITH tb(Invoice_No, chxi, ForAccountof, NotifyParty, Consignee, gs) AS
    (
     SELECT a.Invoice_No, a.chxi, c.ForAccountof, c.NotifyParty, c.Consignee, c.gs
     from tb1
    )
   if zzxbg = 1
   begin
    ....
   end

END


以上语句出错"关键字 'if' 附近有语法错误。"

请问with 后只能跟select关键字, 不能用if 语句是吗?

------解决方案--------------------
应该是,可以建立临时表
------解决方案--------------------
不能使用if。
------解决方案--------------------
@zzxbg bit = 1
AS
BEGIN
SET NOCOUNT ON;
if zzxbg != 1
begin
WITH tb(Invoice_No, chxi, ForAccountof, NotifyParty, Consignee, gs) AS
(
SELECT a.Invoice_No, a.chxi, c.ForAccountof, c.NotifyParty, c.Consignee, c.gs
from tb1
)
end
if zzxbg = 1
begin
end



END


这样看可以不?
------解决方案--------------------
SQL code
  @zzxbg       bit = 1
AS
BEGIN
SET NOCOUNT ON;
    WITH tb(Invoice_No, chxi, ForAccountof, NotifyParty, Consignee, gs) AS
    (
     SELECT a.Invoice_No, a.chxi, c.ForAccountof, c.NotifyParty, c.Consignee, c.gs
     from tb1
    )
--可以这样
  select case @zzxbg when 1 then '' else '' end

END

------解决方案--------------------
不是只能接select

是with 定义了表达式后马上要使用,例如:
SQL code

declare @t table(id int)
;with m as (select 1 as col)
insert into @t select * from m

------解决方案--------------------
定义公用表表达式后,须对其进行引用。 (语法限定)