View Full Version : دستور Insert همراه با یک شرط خاص
  
vbiman
یک شنبه 13 شهریور 1390, 16:22 عصر
سلام
آیا میشه در دستور Insert از شرط هم استفاده کرد؟ من یک جدول به نام person به صورت زیر دارم :
Code nvarchar(15)
Name nvarchar(15)
Pass nvarchar(15)
حالا می خوام در هر بار insert اول چک بشه که Code تکراری نداشته باشم بعد اقدام به عمل Insert کنه حالا امکان همچین کاری هست با دستور Insert یا نه؟ اگه هست چه جوری ؟:متفکر:
Galawij
یک شنبه 13 شهریور 1390, 18: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, 19: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, 12: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
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.