PDA

View Full Version : سوال: استور پروسيجر



s_mokhtari
سه شنبه 28 اردیبهشت 1389, 08:08 صبح
با سلام
من ميخوام يه نمونه استورپروسيجر با دستور case يا if بسازم مثلا اگه جاري كاركنان كه كدش 22 را انتخاب كرد يه سلكت اجرا بشه ولي اگه جاري مشتركين را كه كدش 23 است را انتخاب كرد همون سلكت جاري كاركنان اجرا بشه ولي با دو تا پارامتر اضافه تر چون توي سلكت دومي نام مدرسه و مشتري را هم ميخوام ولي تو سلكت اول و دوم جفتش نام راننده بايد باشه
با تشكر فراوان:متعجب:

mehdi_turbo
سه شنبه 28 اردیبهشت 1389, 08:29 صبح
دوست من اگه در book on line خود sql سرچ کنی هزار نمونه store procedure واست میاره

s_mokhtari
چهارشنبه 29 اردیبهشت 1389, 07:26 صبح
دوست من اگه در book on line خود sql سرچ کنی هزار نمونه store procedure واست میاره
با سلام
ميشه اين آدرسي را كه گفتيد واضح تر بگيد منظورتون راهنماي اسكيوال است
با تشكر:متفکر:

sky_in_iran
چهارشنبه 29 اردیبهشت 1389, 07:34 صبح
سلام دوست عزيز
الان مشكل شما سينتكس كاره يا اصلا نميدوني چيكار بايد كرد كمي بيشتر توضيح بده اگر مشكل سينتكس خوب help sql بهترين آموزه هارو داره اما سوالت كمي گنگه بيشتر توضيح بده لطفا
موفق باشي

ozzy_mra
چهارشنبه 29 اردیبهشت 1389, 07:45 صبح
http://www.barnamenevis.org/forum/showthread.php?t=220444
موفق باشی

s_mokhtari
چهارشنبه 29 اردیبهشت 1389, 22:11 عصر
http://www.barnamenevis.org/forum/showthread.php?t=220444
موفق باشی
با سلام و تشكر از راهنمايي شما
دوست عزيز من با تريگر آشنايي اصلان ندارم ميشه يه نمونه‌هايي از ساده به سخت بهم نشون بدي
با تشكر:خجالت:

M aJi D
چهارشنبه 29 اردیبهشت 1389, 23:30 عصر
سلام.
دوست عزيز اينجا نمونه هاي زيادي استور پروسيجر پيدا ميكني.
در ضمن براي يادگيري sql هم تو همين سايت تايپ كن msdn و چيزي كه ميخواي را جستجو كن.
http://social.msdn.microsoft.com/Search/en-US?query=stored%20Procedures&ac=8

موفق باشي

s_mokhtari
یک شنبه 02 خرداد 1389, 08:03 صبح
سلام.
دوست عزيز اينجا نمونه هاي زيادي استور پروسيجر پيدا ميكني.
در ضمن براي يادگيري sql هم تو همين سايت تايپ كن msdn و چيزي كه ميخواي را جستجو كن.
http://social.msdn.microsoft.com/Search/en-US?query=stored%20Procedures&ac=8

موفق باشي
با سلام
اين كد ركورد تكراري را هم درج ميكنه اشكال كار كجاست

ALTER PROCEDURE dbo.[1]
(@name nvarchar(50) = NULL,
@sal nvarchar(9),
@school int=null,
@driver int=null


)
AS

if (@name is null and @school is not null and @driver is not null)
begin
INSERT INTO dbo.Tbl_pardakh
(CustomerID, DriverID, scoolid, sal)

SELECT dbo.Tbl_Customer.CustomerID, dbo.Tbl_Customer.DriverID, dbo.Tbl_Customer.ScoolID, dbo.Tbl_pardakh.sal
FROM dbo.Tbl_Driver INNER JOIN
dbo.Tbl_pardakh ON dbo.Tbl_Driver.DriverID = dbo.Tbl_pardakh.DriverID RIGHT OUTER JOIN
dbo.Tbl_Customer ON dbo.Tbl_Driver.DriverID = dbo.Tbl_Customer.DriverID LEFT OUTER JOIN
dbo.Tbl_ScoolM INNER JOIN
dbo.Tbl_Scool ON dbo.Tbl_ScoolM.ScoolNo = dbo.Tbl_Scool.ScoolNo ON dbo.Tbl_Customer.ScoolID = dbo.Tbl_Scool.ScoolID

WHERE (tbl_customer.scoolid=@school and tbl_customer.driverid=@driver)
end

با تشكر

ozzy_mra
یک شنبه 02 خرداد 1389, 09:38 صبح
با سلام و تشكر از راهنمايي شما
دوست عزيز من با تريگر آشنايي اصلان ندارم ميشه يه نمونه‌هايي از ساده به سخت بهم نشون بدي
با تشكر:خجالت:

سلام اینجا چند تا نمونه از ایجاد و استفاده از تریگرها گذاشتم البته با اجازه از استاد گرامی جناب مهندس ثباتی

---- TRIGGERS -----
go

create trigger tr1 on customers
after insert
as
rollback tran
go


create trigger tr1 on customers
after insert
as
print 'You cannot register any new customer!'
rollback tran
go

insert Customers(CustomerID,CompanyName) values('a21','b2')
go

create trigger tr2 on orders
after insert
as
select * from inserted
rollback tran
go

insert Orders(CustomerID, OrderDate) values('vinet',GETDATE())
go

alter trigger tr2 on orders
after insert
as
declare @cid char(5)
select @cid=customerid from inserted
if (select count(orderid) from orders where customerid=@cid)<=5
rollback tran
go

alter trigger tr2 on orders
after insert
as
if (select count(o.orderid) from inserted i join orders o
on i.customerid=o.customerid)<=5
rollback tran
go


insert Orders(CustomerID, OrderDate) values('alfki',GETDATE())
insert Orders(CustomerID, OrderDate) values('anatr',GETDATE())

select * from Orders
order by CustomerID



delete orders where OrderID=11081
---------------------------
go
create trigger tr3 on [order details]
after insert
as
declare @pid int
declare @pc int
select @pid=productid, @pc=Quantity from inserted
if (select UnitsInStock from products where productid=@pid)<@pc
rollback tran
go

insert [Order Details] (OrderID,ProductID,Quantity) values(10248,1,39)





go
Alter trigger tr3 on [order details]
After insert
as
If Not Exists (Select *
From Inserted i Join dbo.Products p
on i.ProductID = p.ProductID
where i.Quantity <= p.UnitsInStock )
Begin
print 'mojodi dar Anbar kafi nist'
Rollback
end
Go

insert [Order Details] (OrderID,ProductID,Quantity) values(10249,1,9)

---------------------------------------
go
create trigger tr7 on customers2
after delete
as
declare @cid nchar(5)
select @cid=customerid from deleted
if (select count(orderid) from orders where customerid=@cid)>5
rollback tran

g

go
alter trigger t2 on customers2
after delete
as
if(select count(o.orderid) from orders o
join deleted d on o.customerid=d.customerid) >5
rollback tran
go

-----------------------------------
go
create trigger tr4 on customers
instead of insert
as

select 1
go

insert Customers(CustomerID,CompanyName) values('a3','b3')

select * from Customers


alter trigger tr4 on customers
instead of insert
as
insert customers select * from inserted
go

-----------

alter trigger tr5 on [order details]
instead of insert
as
declare @cnt int
--declare @qnt int

set @cnt = (select p.UnitsInStock from inserted i
inner join products p
on i.productid=p.productid)
if @cnt < (select quantity from inserted)
begin
insert [Order Details] (ProductID,Orderid,Quantity) (select ProductID,orderid,@cnt from inserted)
print 'meghdare mojodi insert shod'
end
else
insert [Order Details] (ProductID,Orderid,Quantity) (select productid, orderid,quantity from inserted)
go



Create trigger tr3 on [order details]
instead of insert
as

If Exists (Select *
From Inserted i Join dbo.Products p
on i.ProductID = p.ProductID
where i.Quantity <= p.UnitsInStock )
insert into [order details] select * from inserted
else
Begin
insert into [order details]
Select i.orderId,i.productid,i.unitprice,p.UnitsInStock ,i.discount
from inserted i join products p
on i.productid = p.productid

-- print 'mojodi dar Anbar kafi nist'
-- Rollback
end

--

go
Create trigger tr3 on [order details]
instead of insert
as

insert [order details] Select i.orderId,i.productid,i.unitprice,
case when i.quantity>p.unitsinstock then p.unitsinstock
else i.quantity end ,i.discount
from inserted i join products p
on i.productid = p.productid


insert [Order Details] (OrderID,ProductID,Quantity) values(10300,1,40)
insert [Order Details] (OrderID,ProductID,Quantity) values(10301,1,4)

select * from [order details]
where orderid=10301

s_mokhtari
یک شنبه 02 خرداد 1389, 12:09 عصر
سلام اینجا چند تا نمونه از ایجاد و استفاده از تریگرها گذاشتم البته با اجازه از استاد گرامی جناب مهندس ثباتی

---- TRIGGERS -----
go

create trigger tr1 on customers
after insert
as
rollback tran
go


create trigger tr1 on customers
after insert
as
print 'You cannot register any new customer!'
rollback tran
go

insert Customers(CustomerID,CompanyName) values('a21','b2')
go

create trigger tr2 on orders
after insert
as
select * from inserted
rollback tran
go

insert Orders(CustomerID, OrderDate) values('vinet',GETDATE())
go

alter trigger tr2 on orders
after insert
as
declare @cid char(5)
select @cid=customerid from inserted
if (select count(orderid) from orders where customerid=@cid)<=5
rollback tran
go

alter trigger tr2 on orders
after insert
as
if (select count(o.orderid) from inserted i join orders o
on i.customerid=o.customerid)<=5
rollback tran
go


insert Orders(CustomerID, OrderDate) values('alfki',GETDATE())
insert Orders(CustomerID, OrderDate) values('anatr',GETDATE())

select * from Orders
order by CustomerID



delete orders where OrderID=11081
---------------------------
go
create trigger tr3 on [order details]
after insert
as
declare @pid int
declare @pc int
select @pid=productid, @pc=Quantity from inserted
if (select UnitsInStock from products where productid=@pid)<@pc
rollback tran
go

insert [Order Details] (OrderID,ProductID,Quantity) values(10248,1,39)





go
Alter trigger tr3 on [order details]
After insert
as
If Not Exists (Select *
From Inserted i Join dbo.Products p
on i.ProductID = p.ProductID
where i.Quantity <= p.UnitsInStock )
Begin
print 'mojodi dar Anbar kafi nist'
Rollback
end
Go

insert [Order Details] (OrderID,ProductID,Quantity) values(10249,1,9)

---------------------------------------
go
create trigger tr7 on customers2
after delete
as
declare @cid nchar(5)
select @cid=customerid from deleted
if (select count(orderid) from orders where customerid=@cid)>5
rollback tran

g

go
alter trigger t2 on customers2
after delete
as
if(select count(o.orderid) from orders o
join deleted d on o.customerid=d.customerid) >5
rollback tran
go

-----------------------------------
go
create trigger tr4 on customers
instead of insert
as

select 1
go

insert Customers(CustomerID,CompanyName) values('a3','b3')

select * from Customers


alter trigger tr4 on customers
instead of insert
as
insert customers select * from inserted
go

-----------

alter trigger tr5 on [order details]
instead of insert
as
declare @cnt int
--declare @qnt int

set @cnt = (select p.UnitsInStock from inserted i
inner join products p
on i.productid=p.productid)
if @cnt < (select quantity from inserted)
begin
insert [Order Details] (ProductID,Orderid,Quantity) (select ProductID,orderid,@cnt from inserted)
print 'meghdare mojodi insert shod'
end
else
insert [Order Details] (ProductID,Orderid,Quantity) (select productid, orderid,quantity from inserted)
go



Create trigger tr3 on [order details]
instead of insert
as

If Exists (Select *
From Inserted i Join dbo.Products p
on i.ProductID = p.ProductID
where i.Quantity <= p.UnitsInStock )
insert into [order details] select * from inserted
else
Begin
insert into [order details]
Select i.orderId,i.productid,i.unitprice,p.UnitsInStock ,i.discount
from inserted i join products p
on i.productid = p.productid

-- print 'mojodi dar Anbar kafi nist'
-- Rollback
end

--

go
Create trigger tr3 on [order details]
instead of insert
as

insert [order details] Select i.orderId,i.productid,i.unitprice,
case when i.quantity>p.unitsinstock then p.unitsinstock
else i.quantity end ,i.discount
from inserted i join products p
on i.productid = p.productid


insert [Order Details] (OrderID,ProductID,Quantity) values(10300,1,40)
insert [Order Details] (OrderID,ProductID,Quantity) values(10301,1,4)

select * from [order details]
where orderid=10301
با سلام
من يه ديتاگريد دارم ميخوام يه دفعه ستونهاشو درج كنم ولي از بين اين ركوردها ممكن چندتاش تو جدول پرداختم تكراري باشه حالا ميخوام تعداد سطر تكراري را يا تعداد ركوردي كه درج شده است را بعد از درج كردن نشونم بده چطوري
خيلي عجله دارم
if (@name is null and @school is not null and @driver is not null)
begin
INSERT INTO dbo.Tbl_pardakh
(CustomerID, DriverID, scoolid, sal)

SELECT dbo.Tbl_Customer.CustomerID, dbo.Tbl_Customer.DriverID, dbo.Tbl_Customer.ScoolID, dbo.Tbl_pardakh.sal
FROM dbo.Tbl_Driver INNER JOIN
dbo.Tbl_pardakh ON dbo.Tbl_Driver.DriverID = dbo.Tbl_pardakh.DriverID RIGHT OUTER JOIN
dbo.Tbl_Customer ON dbo.Tbl_Driver.DriverID = dbo.Tbl_Customer.DriverID LEFT OUTER JOIN
dbo.Tbl_ScoolM INNER JOIN
dbo.Tbl_Scool ON dbo.Tbl_ScoolM.ScoolNo = dbo.Tbl_Scool.ScoolNo ON dbo.Tbl_Customer.ScoolID = dbo.Tbl_Scool.ScoolID

WHERE (tbl_customer.scoolid=@school and tbl_customer.driverid=@driver)
end
اين هم تريگري كه نوشتم
ALTER TRIGGER triger1
on dbo.Tbl_pardakh
after INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @cid int

select @cid=customerid from inserted
if (select count(customerid) from tbl_pardakh where customerid =@cid) !=0
raiserror('قبلا ثبت شده است',16,1)


-- Insert statements for trigger here

END
ولي يك ركورد درج ميكنه فقط من ميخوام تمامشا درج كنه اگه تكراري بود پيغام بده

با تشكر

ozzy_mra
یک شنبه 02 خرداد 1389, 12:29 عصر
از یه فانکشن تو sql استفاده کن و به عنوان پارامتر ورودی اون دستور select تتو که باهاش hnsert می کنی رو بهش پاس بده و دو تا پارامتر خروجی برای تعداد درج شده و تعداد تکراری در نظر بگیر
تعداد درج شده رو از یه select count(*) روی کوئری select می تونی بدست بیاری یعنی به جای

SELECT dbo.Tbl_Customer.CustomerID, dbo.Tbl_Customer.DriverID, dbo.Tbl_Customer.ScoolID, dbo.Tbl_pardakh.sal

بنویس select count(*) و ادامه کوئری که تعداد درج شده رو نشون می ده برای تکراری ها هم بفرض می خواد با جدول dest چک کنه که تکراری چند تاس اینجوری استفاده کن :

SELECT COUNT(dbo.Tbl_Customer.CustomerID)
FROM dbo.Tbl_Driver INNER JOIN
dbo.Tbl_pardakh ON dbo.Tbl_Driver.DriverID = dbo.Tbl_pardakh.DriverID RIGHT OUTER JOIN
dbo.Tbl_Customer ON dbo.Tbl_Driver.DriverID = dbo.Tbl_Customer.DriverID LEFT OUTER JOIN
dbo.Tbl_ScoolM INNER JOIN
dbo.Tbl_Scool ON dbo.Tbl_ScoolM.ScoolNo = dbo.Tbl_Scool.ScoolNo ON dbo.Tbl_Customer.ScoolID = dbo.Tbl_Scool.ScoolID

WHERE (tbl_customer.scoolid=@school and tbl_customer.driverid=@drive) and (dbo.Tbl_Customer.CustomerID in (SELECT dest.CustomerID from dest)
فکر کنم جواب بده