Create Function dbo.uf_GetRs
(
@Year int
)
Returns Table
As
Return(
SELECT a.ID,a.RName
FROM Table1 a 
Where Year(a.Date)=@Year)
如何在上面函数中加入下面内容
declare @BDate char(10)
set @BDate =@Year+'-01-01'最后把@Year用@BDate替换

解决方案 »

  1.   

    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT a.ID,a.RName 
    FROM Table1 a 
    Where Year(a.Date)=@Year+'-01-01' ) 
      

  2.   

    create table Table1(id int,RName varchar(50),date datetime)
    insert into Table1 select 1,'a','2008-01-01'
    insert into Table1 select 2,'b','2008-11-29'
    create Function dbo.uf_GetRs
    (
    @Year int
    )
    Returns Table
    As
    Return(
    SELECT a.ID,a.RName
    FROM Table1 a
    Where convert(varchar(10),a.Date,120)=ltrim(@Year)+'-01-01') select * from dbo.uf_GetRs(2008)
    ID RName
    1 a
      

  3.   

    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT ID,RName 
    FROM Table1
    Where Date=@Year+'-01-01') 
      

  4.   

    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT ID,RName 
    FROM Table1
    Where Date=rtrim(@Year)+'-01-01') 
      

  5.   

    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT a.ID,a.RName 
    FROM Table1 a 
    Where a.Date=cast(@Year as varchar(4))+'-01-01' ) 
      

  6.   

    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT ID,RName 
    FROM Table1
    Where Date=@Year+'-01-01') 
      

  7.   


    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As 
    Return( 
    SELECT a.ID,a.RName 
    FROM Table1 a 
    Where a.Date=@Year+'-01-01' ) 
      

  8.   

    可能我没说清楚我是必须得在这个函数中定义变量,因为有很多个变量,这个只是个例子declare @BDate char(10) 
    set @BDate =@Year+'-01-01' 最后把@Year用@BDate替换
      

  9.   

    --改成存儲過程吧
    create proc dbo.uf_GetRs 
      @Year int
    as
      declare @BDate varchar(10) 
      set @BDate =rtrim(@Year)+'-01-01' 
      SELECT a.ID,a.RName FROM Table1 a Where a.Date=@BDate
      

  10.   


    create table Table1(id int,RName varchar(50),date datetime)
    insert into Table1 select 1,'a','2008-01-01'
    insert into Table1 select 2,'b','2008-11-29'
    create Function dbo.uf_GetRs
    (
    @Year int
    )
    Returns Table
    As
    declare @BDate char(10) 
    set @BDate =@Year+'-01-01' 
    Return(
    SELECT a.ID,a.RName
    FROM Table1 a
    Where convert(varchar(10),a.Date,120)=ltrim(@BDate )) 
      

  11.   

    谢谢brio8425 ,语法有错误,我也是这样写的,你测试过吗?
      

  12.   


    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As
    begin
    declare @BDate char(10) 
    set @BDate =@Year+'-01-01'
     
    Return( 
    SELECT a.ID,a.RName 
    FROM Table1 a 
    Where Year(a.Date) = @BDate ) end
    go
    直接加不就行了么
      

  13.   


    Create Function dbo.uf_GetRs 

    @Year int 

    Returns Table 
    As
    begin
    declare @BDate char(10) 
    set @BDate =convert(varchar(4),@Year)+'-01-01'
     
    Return( 
    SELECT a.ID,a.RName 
    FROM Table1 a 
    Where Year(a.Date) = @BDate ) end
    go
      

  14.   

    服务器: 消息 170,级别 15,状态 31,过程 uf_GetRs,行 16
    第 16 行: 'BEGIN' 附近有语法错误。
      

  15.   

    --TRY
    Create Function dbo.uf_GetRs 

    @Year int 

    Returns  @temp Table (ID int, RName  varchar(20))
    As 
       begin
       declare @BDate varchar(10) 
       set @BDate =rtrim(@Year)+'-01-01' 
       insert @temp  SELECT a.ID,a.RName   FROM Table1 a Where a.Date=@BDate
       return
       end
      

  16.   

    谢谢 wufeng4552 这种方法可以,已经实现,但是我不想加临时表,因为返回记录集有100多个字段,记录数量大,希望直接批回
      

  17.   

    --直接返回,換成存儲過程吧
    create proc dbo.uf_GetRs 
      @Year int
    as
      declare @BDate varchar(10) 
      set @BDate =rtrim(@Year)+'-01-01' 
      SELECT a.ID,a.RName FROM Table1 a Where a.Date=@BDate
      

  18.   

    需求过于YD,似乎无法满足。你可以在函数外,先将@BDate处理好,然后再将其作为一个参数传给函数。