2017-04-09 13 views
-1

ELSEが自分のコードでなぜハイライテリアであるのか知っていますか?最後のELSE。私はプロシージャを作成しようとしていますが、if節に問題があります他にもif else else sql

誰か助けてもらえますか?私はidの最大値を持つ解を見つけ、それに1を加えることは良いことではないが、それは一時的なものであることを知っている。後、私は唯一の

CREATE PROCEDURE dodajAuto 
    (@marka VARCHAR, 
    @model VARCHAR, 
    @kolor VARCHAR, 
    @moc INT, 
    @dataProdukcji DATETIME, 
    @cena DECIMAL, 
    @typ VARCHAR, 
    @przebieg INT) 
AS 
BEGIN 
    DECLARE @tmpMarka VARCHAR = (SELECT MARKA FROM MARKA WHERE MARKA=MARKA) 
    DECLARE @tmpModel VARCHAR = (SELECT MODEL FROM MODEL WHERE MODEL=MODEL) 

    DECLARE @tmpIdModelu INT = (SELECT IDMODELU FROM MODEL WHERE MODEL=MODEL) 
    DECLARE @tmpIdMarki INT = (SELECT IDMARKI FROM MARKA WHERE MARKA=MARKA) 

    DECLARE @tmpLastIdSamochodu INT = (SELECT MAX(IDSAMOCHODU) FROM SAMOCHOD) 
    DECLARE @tmpLastIdModelu INT = (SELECT MAX(IDMODELU) FROM MODEL) 
    DECLARE @tmpLastIdMarki INT = (SELECT MAX(IDMARKI) FROM MARKA) 


    IF (@tmpMarka IS NOT NULL) 
     IF (@tmpModel IS NOT NULL) 
      INSERT INTO SAMOCHOD 
      VALUES (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataPRodukcji, @typ); 
     ELSE 
      INSERT INTO MODEL 
      VALUES (@tmpLastIdModelu+1, @tmpIdMarki, @model, @cena) 

    SET @tmpIdModelu = (SELECT IDMODELU FROM MODEL WHERE MODEL = MODEL) 

    INSERT INTO SAMOCHOD 
    VALUES (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataProdukcji, @typ); 

    ELSE --THIS IS WHERE SYNTAX IS HIGLIHTED, 

    INSERT INTO MARKA VALUES (@tmpLastIdMarki+1, @marka) 

    SET @tmpIdMarki = (SELECT IDMARKI FROM MARKA WHERE MARKA = MARKA) 

    INSERT INTO MODEL 
    VALUES (@tmpLastIdModelu+1, @tmpIdMarki, @model, @cena) 

    SET @tmpIdModelu = (SELECT IDMODELU FROM MODEL WHERE MODEL = MODEL) 

    INSERT INTO SAMOCHOD 
    VALUES (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataProdukcji, @typ); 
+2

あなたのコードはまったく意味がありません。 'MODEL = MODEL'のような大きな問題があります。 –

+0

また、 'IF-ELSE'ブロックの' INSERT'文の末尾にある ';'はなぜですか? –

+0

[蹴るバッド癖:長さのないVARCHARを宣言する - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar- without-length.aspx) – SqlZim

答えて

2

ifelseより良い方法を実装し、それらの後に単一のステートメントに適用しようとします。グループ化を実行する複数ステップの操作がある場合は、begin;end;でグループ化します。

常にvarchar()nvarchar()データタイプのサイズ、及びdecimal()numeric()データ型の精度とスケールを宣言する。

Bad habits to kick : declaring VARCHAR without (length) - Aaron Bertrand

create procedure dodajAuto(
    @marka varchar(30) 
    , @model varchar(30) 
    , @kolor varchar(30) 
    , @moc int 
    , @dataProdukcji datetime 
    , @cena decimal(18,0) 
    , @typ varchar(30) 
    , @przebieg int) 
as 
    begin; 
    set nocount, xact_abort on; 

    declare @tmpMarka varchar(30) = (select marka from marka where [email protected]); 
    declare @tmpModel varchar(30) = (select model from model where [email protected]); 

    declare @tmpIdModelu int = (select idmodelu from model where [email protected]); 
    declare @tmpIdMarki int = (select idmarki from marka where [email protected]); 

    declare @tmpLastIdSamochodu int = (select max(idsamochodu) from samochod); 
    declare @tmpLastIdModelu int = (select max(idmodelu) from model); 
    declare @tmpLastIdMarki int = (select max(idmarki) from marka); 

    if (@tmpMarka is not null) 
    if (@tmpModel is not null) 

     insert into samochod values (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataprodukcji, @typ); 
    else 
     begin; 
     insert into model values (@tmpLastIdModelu+1, @tmpIdMarki, @model, @cena); 
     set @tmpIdModelu = (select idmodelu from model where [email protected]); 
     insert into samochod values (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataProdukcji, @typ); 
     end; 
    else 
    begin; 
     insert into marka values (@tmpLastIdMarki+1, @marka); 
     set @tmpIdMarki = (select idmarki from marka where [email protected]); 
     insert into model values (@tmpLastIdModelu+1, @tmpIdMarki, @model, @cena); 
     set @tmpIdModelu = (select idmodelu from model where [email protected]); 
     insert into samochod values (@tmpLastIdSamochodu+1, @tmpIdModelu, @kolor, @moc, @przebieg, @dataProdukcji, @typ); 
    end; 
    end; 
go 
+0

このコードでは、 ';終わり近くの終わりang 'go'がハイライト – javaSqlWebDesignRubyOnPhp

+0

最後にもう一人の運があった。今はうまくいく。おかげでたくさん;) – javaSqlWebDesignRubyOnPhp

+0

@javaSqlWebDesignRubyOnPhp喜んでお手伝いします! – SqlZim