2

以下のクエリを使用しますが、Incorrect syntax near ifこの問題を解決する方法を教えてください。

CREATE FUNCTION getCustomerAllReseller
(
    @code BIGINT 
)
RETURNS TABLE AS
RETURN (
    WITH Directories AS 
    (
        IF (@code < 0)
            SELECT code FROM CustomerAll WHERE code = @code
        ELSE
            SELECT code FROM Customer WHERE code = @code
    )
    SELECT * FROM Directories
)
4

3 に答える 3

1

の構文withは、ステートメントではなくクエリを想定しています。ユニオンを使用したクエリで条件を使用できます。

WITH Directories AS (
  select code from CustomerAll where @code<0 and code=@code
  union all
  Select code from Customer where @code>=0 and code=@code
)
SELECT * FROM Directories
于 2013-09-05T05:42:58.400 に答える
0

は使用できません。使用するIF必要があります。SELECTCTE_definition_part

結果セットが共通テーブル式に取り込まれる SELECT ステートメントを指定します。CTE_query_definition の SELECT ステートメントは、ビューを作成する場合と同じ要件を満たす必要がありますが、CTE は別の CTE を定義できません。詳細については、「備考」セクションと「CREATE VIEW (Transact-SQL)」を参照してください。

http://technet.microsoft.com/en-us/library/ms175972.aspx

于 2013-09-05T05:39:56.340 に答える
0

これを試してみてください -

CREATE FUNCTION dbo.getCustomerAllReseller
(
    @code BIGINT
)
RETURNS TABLE AS
RETURN
(
    SELECT code 
    FROM dbo.CustomerAll 
    WHERE code = @code
        AND @code < 0

    UNION ALL

    SELECT code 
    FROM dbo.Customer 
    WHERE code = @code
        AND @code >= 0
)
于 2013-09-05T05:42:51.457 に答える