0

私はこのようなストアドプロシージャを持っています(必要最小限に短縮されています):

CREATE PROCEDURE [dbo].[proc_Foo]
    -- Add the parameters for the stored procedure here
    @StyleNumber int,
    @App nvarchar(50),
    @User nvarchar(20)
AS
BEGIN
    DECLARE @UserChar varchar(1) = 'U'

    -- User with App
    SELECT [StyleType],
           [Value], 'UA' AS 'DerivedFrom'
    FROM daten.dbo.GridStyleLocal
    WHERE [StyleAssign] = @UserChar
    AND [User] = @User
    AND [StyleNumber] = @StyleNumber
    AND [Application] = @App

    UNION

    -- Global (Basis) with app
    SELECT [StyleType],
           [Value], 'GA' AS 'DerivedFrom'
    FROM basis.dbo.GridStyle
    WHERE [StyleNumber] = @StyleNumber
    AND [Application] = @App
    AND [StyleType] NOT IN (
        SELECT [StyleType]
        FROM daten.dbo.GridStyleLocal
        WHERE [StyleAssign] = @UserChar
        AND [User] = @User
        AND [StyleNumber] = @StyleNumber
        AND [Application] = @App)

    UNION

    -- Scrape missing StyleTypes from Number 0
    SELECT [StyleType],
           [Value], 'G0A' AS 'DerivedFrom'
    FROM basis.dbo.GridStyle
    WHERE [StyleNumber] = 0
    AND [Application] = @App
    AND [StyleType] NOT IN (
        SELECT [StyleType]
        FROM daten.dbo.GridStyleLocal
        WHERE [StyleAssign] = @UserChar
        AND [User] = @User
        AND [StyleNumber] = @StyleNumber
        AND [Application] = @App)
    AND [StyleType] NOT IN (
        SELECT [StyleType]
        FROM basis.dbo.GridStyle
        WHERE [StyleNumber] = @StyleNumber
        AND [Application] = @App)

END

GO

現在StyleNumber、0 が私の基本スタイルです。StyleType別のものにないすべてのプロパティ ( ) は 0StyleNumberから派生しStyleNumberます。しかし、0 に設定されているSELECTときに 2 番目 (アプリを使用したグローバル (ベース))を含めると、値は G0A ではなく GA になります。@StyleNumberDerivedFrom

それで、 0SELECTの場合、これを組合から除外できる条件@StyleNumberはありますか?

4

1 に答える 1

1

必要なものが正確に明確ではありません。2 番目のクエリからG0Aifを取得する必要があると仮定すると、 (-- Global (Basis) with app) を次のように.@StyleNumber = 0second select query CASE

SELECT [StyleType],
       [Value], 
       CASE @StyleNumber WHEN 0 THEN 'G0A' ELSE 'GA' END AS 'DerivedFrom'
FROM basis.dbo.GridStyle
--Rest fo the query

2 番目の選択クエリからレコードを選択しない場合は、as@StyleNumber = 0に追加CASEWHERE clauseます。

WHERE [Application]  = 
  CASE @StyleNumber
      WHEN 0 THEN 'This app does not exist' --Give unavailable @App number 
      ELSE @App
  END
于 2012-12-15T12:56:05.477 に答える