我这里有个问题,就是一开始这样执行SQL:
declare @dataname datetime
declare @lastday datetime
select top 1 @dataname =  dbo.daily.Date  from  dbo.daily    order   by  Date  desc
select  @lastday = convert(char(10),dateadd(day,-1,@dataname),120) 
create view last as select *  from  dbo.daily  where dbo.daily.Date=@lastday  
但是报错说:CREATE VIEW' 必须是批查询中的第一条语句然后我写成函数来执行:
create function fun(@dataname datetime,@lastday datetime)
returns   table     
 as   
  begin 
   select top 1 @dataname = dbo.daily.Date  from  dbo.daily    order   by  Date  desc
  return( select  @lastday = convert(char(10),dateadd(day,-1,@dataname),120))
  end
  go
但还是编译不过去.
我这里传了两次参数,请问各位高手这种创建视图的语句应该怎么写啊?

解决方案 »

  1.   

    SQL Server2000的top 不能接收变量,2005可以。
      

  2.   

    但是报错说:CREATE VIEW' 必须是批查询中的第一条语句 create view前加一个go
      

  3.   

    create function fun(@dataname datetime) 
        returns datetime     
     as   
     begin 
       select top 1 @dataname = dbo.daily.Date  from  dbo.daily    order   by  Date  desc 
       return( select convert(char(10),dateadd(day,-1,@dataname),120)) 
    end
      go 
      

  4.   

    建成存储过程吧
    create proc fun      
     as    
      begin
    declare @dataname datetime
    declare @lastday datetime 
    select top 1 @dataname = dbo.daily.Date  from  dbo.daily    order   by  Date  desc 
    select  @lastday = convert(char(10),dateadd(day,-1,@dataname),120) 
    select *  from  dbo.daily  where dbo.daily.Date=@lastday   
      end 
      

  5.   

    谢谢各位的回答.
    其实我的目的就是想在dbo.daily里面取出dbo.daily.Date里倒数第二近的日期来,也就是最近一天的前一天的数据来,但是用函数我刚刚发现不行,因为参数不好提供.
    存储过程我还没试,等下...
      

  6.   

    declare @dataname datetime 
    declare @lastday datetime 
    select top 1 @dataname =  dbo.daily.Date  from  dbo.daily    order   by  Date  desc 
    select  @lastday = convert(char(10),dateadd(day,-1,@dataname),120)  
    gocreate view last as select *  from  dbo.daily  where dbo.daily.Date=@lastday   
      

  7.   

    这样会报错:
    必须声明变量 '@lastday'。
      

  8.   

    这样会报错:
    必须声明变量 '@lastday'。