2017-04-09 116 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