0

私は SQL Server 2008 R2 を使用しています。次のようなストア プロシージャがあります。

CREATE PROCEDURE Get_Code_Tourne_Matin
    -- Add the parameters for the stored procedure here
@The_FA int,
@The_Jour int,
@The_Insee varchar(10)
AS
BEGIN
declare @TheCode varchar(250)


set @TheCode = case
    when exists (SELECT T_TOURNE_LABEL.LIBELLE 
                  FROM TOURNE
                  LEFT JOIN T_TOURNE_LABEL ON TOURNE.LIB_TOURNE = T_TOURNE_LABEL.NOID
                  WHERE THE_FA = @The_FA AND 
                        NO_INSEE = @The_Insee AND 
                        JOUR = @The_Jour AND 
                       (datepart(hh, LE_HEURE) between 13 and 23 or datepart(hh, LE_HEURE) between 0 and 6)) then LIBELLE
    when exists (SELECT LIBELLE
                  FROM TOURNE
                  LEFT JOIN T_TOURNE_LABEL ON TOURNE.LIB_TOURNE = T_TOURNE_LABEL.NOID
                  WHERE THE_FA = @The_FA AND 
                        NO_INSEE = @The_Insee AND 
                        JOUR = 0 AND 
                       (datepart(hh, LE_HEURE) between 13 and 23 or datepart(hh, LE_HEURE) between 0 and 6)) then LIBELLE
    else '00'


    end


RETURN @TheCode  
END

誹謗中傷を返したいだけです。
見つかったときに 3 つの変数を使用して最初に選択し、リベルを再実行します。
それ以外の場合は、2 つの変数を使用して選択を実行し、見つかったときにリベルを再実行します。それ以外の場合は
'00'を再実行します。

LIBELLE の構文エラーのようです

何か案が ?

4

3 に答える 3

3

私は次のように思います:

set @TheCode = COALESCE(
(SELECT TOP 1 T_TOURNE_LABEL.LIBELLE 
                  FROM TOURNE
                  LEFT JOIN T_TOURNE_LABEL ON TOURNE.LIB_TOURNE = T_TOURNE_LABEL.NOID
                  WHERE THE_FA = @The_FA AND 
                        NO_INSEE = @The_Insee AND 
                        (JOUR = @The_Jour OR JOUR = 0) AND 
                       (datepart(hh, LE_HEURE) between 13 and 23 or datepart(hh, LE_HEURE) between 0 and 6)
ORDER BY JOUR DESC), '00')

すべてのケースをカバーする必要があります。JOUR = @The_Jour(一方が を持ち、もう一方が を持っているクエリから 2 つの一致する行が決して存在しない場合は、 and句JOUR = 0を削除できます(考えられる値はすべて > 0であると想定していることに注意してください)TOP 1ORDER BY@The_Jour

于 2013-03-05T09:14:41.987 に答える
0
CREATE PROCEDURE Get_Code_Tourne_Matin
@The_FA int,
@The_Jour int,
@The_Insee varchar(10)
AS
BEGIN
declare @TheCode varchar(250)
    Set @TheCode = '';
    SELECT top 1 @TheCode = T_TOURNE_LABEL.LIBELLE 
            FROM TOURNE
            LEFT JOIN T_TOURNE_LABEL ON TOURNE.LIB_TOURNE = T_TOURNE_LABEL.NOID
            WHERE THE_FA = @The_FA AND 
                NO_INSEE = @The_Insee AND 
                (JOUR = @The_Jour or JOUR = 0 )AND 
                (datepart(hh, LE_HEURE) between 13 and 23 or datepart(hh, LE_HEURE) between 0 and 6)

    set @TheCode = case
        when len(@TheCode) > 0
        when exists (SELECT @TheCode)
        else '00'

        end
    RETURN @TheCode  
END
于 2013-03-05T09:45:30.520 に答える
0
set @TheCode =(  SELECT   ISNULL(( SELECT TOP 1 T_TOURNE_LABEL.LIBELLE
               FROM   TOURNE
               LEFT JOIN T_TOURNE_LABEL ON TOURNE.LIB_TOURNE = T_TOURNE_LABEL.NOID
               WHERE  THE_FA = @The_FA AND NO_INSEE = @The_Insee AND JOUR = @The_Jour
                               AND ( DATEPART(hh, LE_HEURE) BETWEEN 13 AND 23
                               OR DATEPART(hh, LE_HEURE) BETWEEN 0 AND 6
                               )), '00') AS LIBELLE
于 2013-03-05T09:31:39.897 に答える