2017-04-09 113 views
-1

你知道爲什麼ELSE在我的代碼中很好嗎?最後ELSE。林試圖創建程序,但我有問題,如果子句if else else if 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沒有(長度) - 亞倫伯特蘭](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-沒有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