你知道为什么ELSE在我的代码中更受欢迎吗?最后的ELSE。我试图创建程序,但我有if子句
的问题有人能帮助我吗?我知道最大值为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);
答案 0 :(得分:2)
if
和else
仅适用于它们之后的单个语句。如果您要执行多步操作,请使用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 marka=@marka);
declare @tmpModel varchar(30) = (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
begin;
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);
end;
else
begin;
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);
end;
end;
go