0

更新クエリで大文字と小文字を使用しようとしていますが、エラーが発生します

ストアド プロシージャ 'update dbo.ARInvoiceItems set Hideshowflag = 'case when Hideshowflag is null then Hideshowflag='N' e' が見つかりませんでした。

SQL Server 2005.following では、私が使用したクエリです。

update dbo.ARInvoiceItems 
    set Hideshowflag =(
        case 
            when Hideshowflag is null then Hideshowflag='N'
            when Hideshowflag='N' then 'Y'
            when Hideshowflag='Y' then 'N' end`
where SOId=@SOID 
4

3 に答える 3

3

これを試して。asOrの論理ステートメント内で使用することもできますCASEHideshowflag is null or Hideshowflag='Y'

Update dbo.ARInvoiceItems 
    Set Hideshowflag =
        Case 
            When Hideshowflag is null or Hideshowflag='Y' Then  'N'
            When Hideshowflag='N' Then 'Y'
        End
Where SOId = @SOID 

または、またはをSimple Case使用して同じロジックに対してaを使用して実行できます。IsnullCoalesce

Update dbo.ARInvoiceItems 
    Set Hideshowflag =
        Case Isnull(Hideshowflag,'Y')
            When 'Y' Then  'N'
            When 'N' Then  'Y'
        End
Where SOId = @SOID 

ストアドプロシージャが見つかりませんでした'updatedbo.ARInvoiceItems set Hideshowflag ='Hideshowflagがnullの場合、Hideshowflag='N'e'。

上記の更新クエリをストアドプロシージャとして実行しようとしていると思います。必要なのは、上記のクエリを使用してストアドプロシージャを作成し(まだ実行していない場合)、その名前を使用してストアドプロシージャを実行することです。

EXEC 'Your_procedure_name_should_go_here'
于 2013-02-07T09:15:18.670 に答える
2

投稿したコードに構文エラーがあります

UPDATE dbo.ARInvoiceItems
SET    Hideshowflag =  CASE
                          WHEN Hideshowflag IS NULL THEN  'N'
                          WHEN Hideshowflag = 'N' THEN 'Y'
                          WHEN Hideshowflag = 'Y' THEN 'N'
                        END 
WHERE  SOId = @SOID 

しかし、あなたが得ているとあなたが言うエラーメッセージ

ストアドプロシージャが見つかりませんでした'updatedbo.ARInvoiceItems set Hideshowflag=..。

EXEC @Foo通常、代わりに行う場合に発生しますEXEC (@Foo)

EXECこのステートメントは、 -ingしている文字列変数に含まれていますか?

于 2013-02-07T09:15:00.747 に答える
-1

これはあなたが望むものです

 DECLARE @TEMP table
    (
        jobid int IDENTITY (1,1),
        statusCode int
    )

    INSERT INTO @TEMP
    SELECT 15 UNION 
    SELECT 114 UNION 
    SELECT 14 UNION 
    SELECT 152 UNION 
    SELECT 41 

    SELECT * FROM @TEMP

    DECLARE @jobid int  = 3, @statusCode int = 40

    UPDATE @TEMP
    SET statusCode = (CASE WHEN @statusCode = 40 THEN 15 ELSE 14 END)
    WHERE jobid = @jobid

    SELECT * FROM @TEMP
于 2013-02-07T09:19:36.027 に答える