1

関数を次のように単純化しました。

create function [dbo].[UserSuperTeams](@ProjectId int) 
returns table 
as 
return 
   if @ProjectId=0
   begin 
      select TeamId from TblTeam t 
        union
      select 0 as TeamId
   end
   else
   begin
      select t.TeamId from TblTeam t
        union
      select 1 as TeamId
   end;
go

動作させることができません..構文エラーがあるようですが、動作させる方法がわかりません..何か考えはありますか?

4

4 に答える 4

6

関数で t-sql コードを使用する場合は、'returns' セクションでテーブルを定義してから、insert ステートメントを挿入する必要があります。

create function [dbo].[UserSuperTeams](@ProjectId int) 
  returns @results table (
    TeamId int
  ) as begin

  if @ProjectId=0 begin       
    insert @results (TeamId)
      select TeamId from TblTeam t
      union      
      select 0 as TeamId   
  end   
  else begin
    insert @results (TeamId)
      select t.TeamId from TblTeam t
      union      
      select 1 as TeamId   
end;

return
end
于 2009-12-10T13:53:31.990 に答える
2

関数宣言で一時的な名前とスキーマを使用してテーブルを宣言し、関数でテーブルに挿入する必要があります。

create function [dbo].[UserSuperTeams](@ProjectId int) 
returns @mytable table (TeamID int)  
as 
...

そして次のようなもの:

INSERT INTO @mytable 
select t.TeamId from TblTeam t
    union
select 1 as TeamId

これは、テーブルに複数の行を挿入する関数に特に適しています。

または、単一の の結果のみを返したい場合はSELECT、インライン リターンを使用できます。

BEGIN
    RETURN (
        select t.TeamId from TblTeam t
            union
        select 1 as TeamId
    )
END
于 2009-12-10T13:52:05.553 に答える
1

ジェレミーが言ったように、またはそれが本当に単純化された例に非常に似ている場合は、次のことができます。

create function [dbo].[UserSuperTeams](@ProjectId int) 
returns table 
as 
return (select TeamId from TblTeam t 
        union
        select CASE WHEN @ProjectId = 0 THEN 0 ELSE 1 END as TeamId
       )
go

(つまり、テーブル var/schema を定義する必要はないかもしれません)

于 2009-12-10T13:54:34.937 に答える