PDA

View Full Version : دستور Insert همراه با یک شرط خاص



vbiman
یک شنبه 13 شهریور 1390, 15:22 عصر
سلام
آیا میشه در دستور Insert از شرط هم استفاده کرد؟ من یک جدول به نام person به صورت زیر دارم :

Code nvarchar(15)
Name nvarchar(15)
Pass nvarchar(15)
حالا می خوام در هر بار insert اول چک بشه که Code تکراری نداشته باشم بعد اقدام به عمل Insert کنه حالا امکان همچین کاری هست با دستور Insert یا نه؟ اگه هست چه جوری ؟:متفکر:

Galawij
یک شنبه 13 شهریور 1390, 17:39 عصر
به این صورت عمل کنید:
if not exists (select * from url where url = ...)
insert into url...
این مثال ها را هم نگاه کنید:
begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
update table set ...
where key = @key
end
else
begin
insert table (key, ...)
values (@key, ...)
end
commit tran
یا
begin tran
update table with (serializable) set ...
where kay = @key
if @@rowcount = 0
begin
insert table (key, ...) values (@key,..)
end
commit tran
منبع (http://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server)، این لینک (http://weblogs.sqlteam.com/dang/archive/2007/10/28/Conditional-INSERTUPDATE-Race-Condition.aspx) هم مثال های خوبی دارد.

vbiman
دوشنبه 14 شهریور 1390, 18:27 عصر
به این صورت عمل کنید:
if not exists (select * from url where url = ...)
insert into url...
این مثال ها را هم نگاه کنید:
begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
update table
set ...
where key = @key
end
else
begin
insert table (key, ...)
values (@key, ...)
end
commit tran
یا
begin tran
update table with (serializable) set ...
where kay = @key
if @@rowcount = 0
begin
insert table (key, ...) values (@key,..)
end
commit tran
منبع (http://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server)، این لینک (http://weblogs.sqlteam.com/dang/archive/2007/10/28/Conditional-INSERTUPDATE-Race-Condition.aspx) هم مثال های خوبی دارد.

اینا را باید توی stored procedure بنویسم ؟ IF را اگر در stored procedure بنویسم خطا نمیده؟ و دیگه اینکه یه مثال کوچولوتر میزنی تا بهتر متوجه بشم . :گیج:

Galawij
سه شنبه 15 شهریور 1390, 11:01 صبح
بله دوست عزیز، پارامتر کد را به روال پاس می دید و داخل روال چک می کنید.
در مورد مثال هم اگر لینک دوم (http://weblogs.sqlteam.com/dang/archive/2007/10/28/Conditional-INSERTUPDATE-Race-Condition.aspx) را مطالعه می فرمودید، مثال مختصر و مفیدی داره:

CREATE PROCEDURE dbo.Insert_Or_Update_Foo
@ID int,
@Bar int
AS

SET NOCOUNT ON

IF EXISTS(SELECT * FROM dbo.Foo WHERE ID = @ID)
BEGIN
UPDATE dbo.Foo
SET bar = @bar
WHERE ID = @ID
END
ELSE
BEGIN
INSERT INTO dbo.Foo (ID, Bar)
VALUES (@ID, @Bar)
END

RETURN @@ERROR