- 浏览: 308023 次
- 性别:
- 来自: 河南开封
文章分类
最新评论
-
keven_niu:
好不错哦。。
jquery dialog对话框插件实例弹层效果 -
我是云:
zjuttsw 写道zjuttsw 写道楼主最后两个例子很好。 ...
Java switch-case语句用法 -
ytt06460105:
问题已解决。
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
ytt06460105:
楼主:按照你的方法做了,又出现了新的错误:[com.aliba ...
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
zjuttsw:
zjuttsw 写道楼主最后两个例子很好。学习了 不过第三条好 ...
Java switch-case语句用法
引用 session和cookie机制 sql server 2005触发器例子2
sql server2005 触发器例子
数据库 2009-10-26 15:36:00 阅读650 评论0 字号:大中小 订阅
===============================
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_Lz_Week_BaseOil_Insert] ON [dbo].[Lz_Week_BaseOil]
FOR INSERT,UPDATE
AS
SET NOCOUNT ON
if update(yy) or Update(wk)
Begin
update [lzlt].[dbo].[Lz_Week_BaseOil] set
index_id=cast(I.yy as varchar) + right(cast(power(10,2) as varchar)+I.wk,2) + right(cast(power(10,9) as varchar)+I.id,9)
from [lzlt].[dbo].[Lz_Week_BaseOil] P
inner join Inserted I On P.Id = I.ID
Update [lzlt].[dbo].[Lz_Week_BaseOil]
Set change_rate = P.price -
(select top 1 price
from [lzlt].[dbo].[Lz_Week_BaseOil] a
where a.index_id<=P.index_id and a.lz_BaseOil_product_id=I.lz_BaseOil_product_id
And a.ID<> I.ID
Order by a.index_id Desc
)
from [lzlt].[dbo].[Lz_Week_BaseOil] P
INNER JOIN Inserted AS I ON P.id=I.ID
--剔除错误数据
Update [lzlt].[dbo].[Lz_Week_BaseOil]
Set Change_rate=NULL
from [lzlt].[dbo].[Lz_Week_BaseOil] P
INNER JOIN Inserted AS I ON P.id=I.ID
Where (P.price + P.change_rate < 1) AND (P.price + P.change_rate > -1)
End
SET NOCOUNT OFF
/*
Update [lzlt].[dbo].[Lz_Week_BaseOil]
Set Change_rate=NULL
Where (price + change_rate < 1) AND (price + change_rate > -1)
*/
**************************************
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_djjz_Update] ON [dbo].[djjz]
FOR Update
AS
SET NOCOUNT ON
Begin
If Update (wp_ggxh)
Begin
Update [lzlt].[dbo].[djjzList]
Set
wp_ggxh = I.wp_ggxh
from [lzlt].[dbo].[djjzList] P
inner join Inserted I on I.[sid] = P.[sid]
End
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_djjz_deleted] ON [dbo].[djjz]
FOR delete
AS
SET NOCOUNT ON
Begin
delete from djjzList
Where sid in (select sid from deleted)
Update [lzlt].[dbo].[lz_Domestic_exfactory_product]
Set
isdjjz = 0
from [lzlt].[dbo].[lz_Domestic_exfactory_product] P
inner join deleted I on I.[product_id] = P.[product_id]
And P.[product_Model_Id]=I.[model_id]
/*
Update [lzlt].[dbo].[lz_DomesticMarketProduct]
Set
isdjjz = 0
from [lzlt].[dbo].[lz_DomesticMarketProduct] P
inner join deleted I on I.[product_id] = P.[product_id]
And P.[product_Model_Id]=I.[model_id]
*/
Update [lzlt].[dbo].[lz_International_market_product]
Set
isdjjz = 0
from [lzlt].[dbo].[lz_International_market_product] P
inner join deleted I on I.[product_id] = P.[product_id]
-- And P.[product_Model_Id]=I.[model_id]
/*
Update [lzlt].[dbo].[lz_DomesticMarketOilProduct]
Set
isdjjz = 0
from [lzlt].[dbo].[lz_DomesticMarketOilProduct] P
inner join deleted I on I.[product_id] = P.[product_id]
And P.[ProductModelID]=I.[model_id]
*/
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_djjzList_Insert] ON [dbo].[djjzList]
FOR INSERT,UPDATE
AS
SET NOCOUNT ON
if update(pricedate)
Begin
update [lzlt].[dbo].[djjzList] set
index_id=CONVERT(varchar(8) ,I.pricedate, 112) + Replace(CONVERT(varchar(20) ,getdate(), 108) ,':' ,'') + right(cast(power(10,9) as varchar)+I.id,9)
from [lzlt].[dbo].[djjzList] P
inner join Inserted I On P.Id = I.ID
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [qq_delete_bopPrice]
ON [dbo].[lz_BaseOil_Price]
FOR DELETE
AS
BEGIN
DECLARE @product_ID INT
DECLARE @price_date datetime
DECLARE @p_price_date datetime
DECLARE @p_price float
DECLARE @p_Change_Rate float
SET NOCOUNT ON;
/*
SET @price_date = (SELECT price_date FROM Deleted)
SET @product_ID = (SELECT lz_BaseOil_product_id FROM Deleted)
DECLARE @last_date datetime
set @last_date = ( select last_date from lz_BaseOil_product where lz_BaseOil_product_id=@product_ID)
If DateDiff(day,@last_date,@price_date)=0
Begin
--查找相关数据进入游标
DECLARE TR_DELETE_lz_Domestic_exfactory_price_cursor CURSOR FOR
SELECT TOP 1 price_date,price,Change_Rate FROM lz_BaseOil_Price
WHERE lz_BaseOil_product_id =@product_id
order by price_date desc
OPEN TR_DELETE_lz_Domestic_exfactory_price_cursor
FETCH NEXT FROM TR_DELETE_lz_Domestic_exfactory_price_cursor
INTO @p_price_date,@p_price,@p_Change_Rate
CLOSE TR_DELETE_lz_Domestic_exfactory_price_cursor
DEALLOCATE TR_DELETE_lz_Domestic_exfactory_price_cursor
--结束游标
update lz_BaseOil_product set last_date=@p_price_date,last_price=@p_price, Last_change_Rate=@p_Change_Rate where lz_BaseOil_product_id=@product_id
End
--print @next_id
*/
Update lz_BaseOil_product set
last_date=(select top 1 price_date from lz_BaseOil_Price WHERE lz_BaseOil_product_id =I.lz_BaseOil_product_id and lz_BaseOil_Price_Id not in (select lz_BaseOil_Price_Id from Deleted ) order by price_date desc ),
last_price=(select top 1 price from lz_BaseOil_Price WHERE lz_BaseOil_product_id =I.lz_BaseOil_product_id and lz_BaseOil_Price_Id not in(select lz_BaseOil_Price_Id from deleted) order by price_date desc ),
Last_change_Rate=(select top 1 Change_Rate from lz_BaseOil_Price WHERE lz_BaseOil_product_id =I.lz_BaseOil_product_id and lz_BaseOil_Price_Id not in(select lz_BaseOil_Price_Id from deleted) order by price_date desc )
from lz_BaseOil_product P inner join Deleted I
ON P.lz_BaseOil_product_id = I.lz_BaseOil_product_id
SET NOCOUNT OFF;
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [qq_insert_update_bop]
ON [dbo].[lz_BaseOil_Price]
FOR INSERT,UPDATE
AS
DECLARE @current_date datetime --当前价格日期
DECLARE @product_id int --当前产品id
DECLARE @id int
DECLARE @next_id int
DECLARE @current_price decimal(18, 2) --当前价格
DECLARE @Previous_PRICE decimal(18, 2) --以前一个价格
DECLARE @memo nvarchar(500)
SET NOCOUNT ON
if update(price_date) or update(price)
Begin
SET @id = (SELECT lz_BaseOil_Price_Id FROM Inserted)
SET @current_date = (SELECT price_date FROM Inserted)
SET @product_id = (SELECT lz_BaseOil_product_id FROM Inserted)
SET @current_price = (SELECT price FROM Inserted)
SET @memo = (SELECT memo FROM Inserted)
SET @Previous_PRICE = ( SELECT TOP 1 price FROM lz_baseOil_Price WHERE lz_BaseOil_product_id=@product_id and DATEDIFF(day,price_date,@current_date)>0 order by price_date desc )
SET @Previous_PRICE = isnull(@Previous_PRICE,@current_price)
update lz_baseOil_Price set
index_id=CONVERT(varchar(8) ,price_date, 112) + Replace(CONVERT(varchar(20) ,getdate(), 108) ,':' ,'') + right(cast(power(10,9) as varchar)+lz_BaseOil_Price_Id,9)
,change_Rate=@current_price-@Previous_PRICE where lz_BaseOil_Price_Id=@id
set @next_id = ( SELECT TOP 1 lz_BaseOil_Price_Id FROM lz_baseOil_Price WHERE lz_BaseOil_product_id =@product_id and DATEDIFF(day,price_date,@current_date)<0 order by price_date asc )
if @next_id is not null
Begin
update lz_baseOil_Price set yesterday_price=@current_price,change_Rate=price-@current_price where lz_BaseOil_Price_Id=@next_id
end
DECLARE @last_date datetime
set @last_date = ( select last_date from lz_BaseOil_product where lz_BaseOil_product_id=@product_id)
If DateDiff(day,@last_date,@current_date)>=0
Begin
update lz_BaseOil_product set memo=@memo,last_date=@current_date,last_price=@current_price, Last_change_Rate=@current_price-@Previous_PRICE,modify_date=getdate() where lz_BaseOil_product_id=@product_id
End
Else
Begin
update lz_BaseOil_product set modify_date=getdate() where lz_BaseOil_product_id=@product_id
End
--print @next_id
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [TR_DELETE_LZ_City] ON [dbo].[Lz_City]
FOR DELETE
AS
BEGIN
DECLARE @CityID INT
DECLARE @ParentID int
SET NOCOUNT ON;
SET @CityID = (SELECT CityID FROM Deleted)
SET @ParentID = (SELECT ParentID FROM Deleted)
If @ParentID > 0
Begin
update [dbo].[LZ_City] set Child = Child - 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@ParentID))
End
SET NOCOUNT OFF;
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_UPDATE_LZ_City] ON [dbo].[Lz_City]
FOR UPDATE
AS
BEGIN
DECLARE @CityID int
DECLARE @ParentID int
DECLARE @f_CityID INT
DECLARE @f_ParentID int
DECLARE @f_ParentStr nvarchar(250)
DECLARE @f_Depth int
DECLARE @f_RootID int
DECLARE @f_Child int
DECLARE @f_orders int
DECLARE @f_ClassStr nvarchar(250)
SET NOCOUNT ON;
If Update(ParentID)
Begin
DECLARE @ParentStr nvarchar(250)
DECLARE @ClassStr nvarchar(250)
DECLARE @OldParentStr nvarchar(250)
DECLARE @OldParentID int
DECLARE @OldDepth int
DECLARE @Depth int
DECLARE @Child int
DECLARE @orders int
DECLARE @RootID int
SET @CityID = (SELECT CityID FROM Inserted)
SET @ParentID = (SELECT ParentID FROM Inserted)
SET @OldParentID = (SELECT OldParentID FROM Inserted)
SET @OldParentStr = (SELECT ParentStr FROM Inserted)
SET @OldDepth = (SELECT Depth FROM Inserted)
SET @Child = (SELECT Child FROM Inserted)
If @OldParentID<>@ParentID --如果改变得了父ID
Begin
If @ParentID = 0
Begin
SET @RootID = @CityID
SET @Depth = 0
--set @ParentStr = ','+ CONVERT(varchar(10) ,@CityID) +','
set @ParentStr = ''
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_City] where ParentID=@ParentID )
Update [dbo].[LZ_City] SET OldParentID=@ParentID,ParentStr=',0,',Depth=0,RootID=@CityID,orders=@orders+1,classstr=','+CONVERT(varchar(10) ,@CityID)+','
WHERE CityID=@CityID
End
Else
Begin
--@CityID,@ParentID,@ParentStr,@Depth,@RootID,@Child,@orders,@ClassStr
--查找相关数据进入游标
DECLARE TR_INSERT_LZ_City_cursor CURSOR FOR
SELECT Top 1 CityID,ParentID,ParentStr,Depth,RootID,Child,orders,ClassStr FROM [dbo].[LZ_City]
WHERE CityID = @ParentID
OPEN TR_INSERT_LZ_City_cursor
FETCH NEXT FROM TR_INSERT_LZ_City_cursor
INTO @f_CityID,@f_ParentID,@f_ParentStr,@f_Depth,@f_RootID,@f_Child,@f_orders,@f_ClassStr
CLOSE TR_INSERT_LZ_City_cursor
DEALLOCATE TR_INSERT_LZ_City_cursor
--结束游标
If @f_ParentStr=',0,'
Begin
set @ParentStr = ','+ CONVERT(varchar(10) ,@f_CityID) +','
End
Else
Begin
set @ParentStr = @f_ParentStr + CONVERT(varchar(10) ,@f_CityID) + ','
End
SET @RootID = @f_RootID
SET @Depth = @f_Depth+1
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_City] where ParentID=@ParentID )
Update [dbo].[LZ_City] SET
OldParentID=@ParentID,ParentStr=@ParentStr,Depth=@f_Depth+1,RootID=@f_RootID,orders=@orders+1,classstr=@f_ClassStr+CONVERT(varchar(10) ,@CityID)+','
WHERE CityID=@CityID
-- update [dbo].[LZ_City] set Child = Child + 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@ParentID))
End
If @Child > 0 --如果有子节点
Begin
If @OldParentID = 0
Begin
Update [dbo].[LZ_City] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=SUBSTRING(@ParentStr,1,len(@ParentStr)-1)+ParentStr
,classstr=SUBSTRING(@ParentStr,1,len(@ParentStr)-1)+classstr
Where CityID in (select CityID from [dbo].[GetLz_City_GetChildren](@CityID))
End
Else
Begin
If @ParentID = 0
Begin
Update [dbo].[LZ_City] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=','+replace(ParentStr,@oldParentStr,@ParentStr)
,classstr=','+replace(classstr,@oldParentStr,@ParentStr)
Where CityID in (select CityID from [dbo].[GetLz_City_GetChildren](@CityID))
End
else
Begin
Update [dbo].[LZ_City] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=replace(ParentStr,@oldParentStr,@ParentStr)
,classstr=replace(classstr,@oldParentStr,@ParentStr)
Where CityID in (select CityID from [dbo].[GetLz_City_GetChildren](@CityID))
end
End
update [dbo].[LZ_City] set Child = Child + @Child + 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@ParentID))
End
Else
Begin
update [dbo].[LZ_City] set Child = Child + 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@ParentID))
end
If @OldParentID > 0
Begin
If @Child > 0 --如果有子节点
Begin
update [dbo].[LZ_City] set Child = Child - @Child -1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@oldParentID))
End
Else
Begin
update [dbo].[LZ_City] set Child = Child - 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@oldParentID))
End
End
end
End
If Update(AreaID)
Begin
--区域更新
update Lz_City set ProvId = NULL,CapiID = NULL,TownID = NULL ,AreaName=D.CityName,ProvName = NULL,CapiName = NULL,TownName = NULL
FROM Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId And Lz_City.Depth = 0
INNER JOIN Lz_City AS D on I.AreaID = D.CityID
-- 省份更新
update Lz_City set ProvId = I.CityId,CapiID = NULL,TownID = NULL ,AreaName=D.CityName,ProvName = I.CityName,CapiName = NULL,TownName = NULL
FROM Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId And Lz_City.Depth = 1
INNER JOIN Lz_City AS D on I.AreaID = D.CityID
-- 市级更新
update Lz_City set ProvId = I.ParentID,CapiID = I.CityID,TownID = NULL,AreaName=D.CityName,ProvName = B.CityName,CapiName = I.CityName,TownName = NULL
From Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId And Lz_City.Depth = 2
INNER JOIN Lz_City AS B on Lz_City.ParentId = B.CityID
INNER JOIN Lz_City AS D on I.AreaID = D.CityID
-- 县级更新
update Lz_City set ProvId = B.ParentId,CapiID = I.ParentID,TownID = I.CityID,AreaName=D.CityName,ProvName = C.CityName,CapiName = B.CityName,TownName = I.CityName
From Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId And Lz_City.Depth = 3
INNER JOIN Lz_City AS B on Lz_City.ParentId = B.CityID
INNER JOIN Lz_City AS C on B.ParentId = C.CityID
INNER JOIN Lz_City AS D on I.AreaID = D.CityID
End
SET NOCOUNT OFF
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_INSERT_LZ_City] ON [dbo].[Lz_City]
FOR INSERT
AS
DECLARE @CityID INT
DECLARE @ParentID int
DECLARE @ParentStr nvarchar(250)
DECLARE @orders int
DECLARE @f_CityID INT
DECLARE @f_ParentID int
DECLARE @f_ParentStr nvarchar(250)
DECLARE @f_Depth int
DECLARE @f_RootID int
DECLARE @f_AreaID int
DECLARE @f_Child int
DECLARE @f_orders int
DECLARE @f_ClassStr nvarchar(250)
DECLARE @Depth int
SET NOCOUNT ON
SET @CityID = (SELECT CityID FROM Inserted)
SET @ParentID = (SELECT ParentID FROM Inserted)
If @ParentID = 0
Begin
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_City] where ParentID=@ParentID )
Update [dbo].[LZ_City] SET OldParentID=@ParentID,ParentStr=',0,',Depth=0,RootID=@CityID,AreaID=@CityID,orders=@orders+1,classstr=','+CONVERT(varchar(10) ,@CityID)+','
WHERE CityID=@CityID
Set @Depth = 0
End
Else
Begin
--@CityID,@ParentID,@ParentStr,@Depth,@RootID,@Child,@orders,@ClassStr
--查找相关数据进入游标
DECLARE TR_INSERT_LZ_City_cursor CURSOR FOR
SELECT Top 1 CityID,ParentID,ParentStr,Depth,RootID,Child,orders,ClassStr,AreaID FROM [dbo].[LZ_City]
WHERE CityID = @ParentID
OPEN TR_INSERT_LZ_City_cursor
FETCH NEXT FROM TR_INSERT_LZ_City_cursor
INTO @f_CityID,@f_ParentID,@f_ParentStr,@f_Depth,@f_RootID,@f_Child,@f_orders,@f_ClassStr,@f_AreaID
CLOSE TR_INSERT_LZ_City_cursor
DEALLOCATE TR_INSERT_LZ_City_cursor
--结束游标
If @f_ParentStr=',0,'
Begin
set @ParentStr = ','+ CONVERT(varchar(10) ,@f_CityID) +','
End
Else
Begin
set @ParentStr = @f_ParentStr + CONVERT(varchar(10) ,@f_CityID) + ','
End
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_City] where ParentID=@ParentID )
Update [dbo].[LZ_City] SET
OldParentID=@ParentID,ParentStr=@ParentStr,Depth=@f_Depth+1,RootID=@f_RootID,AreaID=@f_AreaID,orders=@orders+1,classstr=@f_ClassStr+CONVERT(varchar(10) ,@CityID)+','
WHERE CityID=@CityID
set @Depth = @f_Depth+1
update [dbo].[LZ_City] set Child = Child + 1 Where CityID in (select CityID from [dbo].[GetLz_City_Parent](@ParentID))
End
If @Depth=0
Begin
--区域更新
update Lz_City set ProvId = NULL,CapiID = NULL,TownID = NULL ,AreaName=D.CityName,ProvName = NULL,CapiName = NULL,TownName = NULL
FROM Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId
INNER JOIN Lz_City AS D on Lz_City.AreaID = D.CityID
End
If @Depth=1
Begin
-- 省份更新
update Lz_City set ProvId = I.CityId,CapiID = NULL,TownID = NULL ,AreaName=D.CityName,ProvName = I.CityName,CapiName = NULL,TownName = NULL
FROM Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId
INNER JOIN Lz_City AS D on Lz_City.AreaID = D.CityID
End
If @Depth=2
Begin
-- 市级更新
update Lz_City set ProvId = I.ParentID,CapiID = I.CityID,TownID = NULL,AreaName=D.CityName,ProvName = B.CityName,CapiName = I.CityName,TownName = NULL
From Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId
INNER JOIN Lz_City AS B on Lz_City.ParentId = B.CityID
INNER JOIN Lz_City AS D on Lz_City.AreaID = D.CityID
End
If @Depth=3
Begin
-- 县级更新
update Lz_City set ProvId = B.ParentId,CapiID = I.ParentID,TownID = I.CityID,AreaName=D.CityName,ProvName = C.CityName,CapiName = B.CityName,TownName = I.CityName
From Lz_City
INNER JOIN Inserted AS I ON Lz_City.CityId = I.CityId
INNER JOIN Lz_City AS B on Lz_City.ParentId = B.CityID
INNER JOIN Lz_City AS C on B.ParentId = C.CityID
INNER JOIN Lz_City AS D on Lz_City.AreaID = D.CityID
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_DELETE_LZ_Columns] ON [dbo].[LZ_Columns]
FOR DELETE
AS
BEGIN
DECLARE @ColumnID INT
DECLARE @ParentID int
SET NOCOUNT ON;
SET @ColumnID = (SELECT ColumnID FROM Deleted)
SET @ParentID = (SELECT ParentID FROM Deleted)
If @ParentID > 0
Begin
update [dbo].[LZ_Columns] set Child = Child - 1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@ParentID))
End
SET NOCOUNT OFF;
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_lz_Domestic_exfactory_price] ON [dbo].[lz_Domestic_exfactory_price]
FOR INSERT,UPDATE
AS
DECLARE @current_date datetime --当前价格日期
DECLARE @product_id int --当前产品id
DECLARE @id int
DECLARE @next_id int
DECLARE @current_price decimal(18, 2) --当前价格
DECLARE @Previous_PRICE decimal(18, 2) --以前一个价格
DECLARE @memo nvarchar(500)
SET NOCOUNT ON
if update(price_date) or update(exfactory_price)
Begin
SET @id = (SELECT lz_Domestic_exfactory_price_id FROM Inserted)
SET @current_date = (SELECT price_date FROM Inserted)
SET @product_id = (SELECT lz_Domestic_exfactory_product_id FROM Inserted)
SET @current_price = (SELECT exfactory_price FROM Inserted)
SET @memo = (SELECT memo FROM Inserted)
SET @Previous_PRICE = ( SELECT TOP 1 exfactory_price FROM lz_Domestic_exfactory_price WHERE lz_Domestic_exfactory_product_id =@product_id and DATEDIFF(day,price_date,@current_date)>0 order by price_date desc )
SET @Previous_PRICE = isnull(@Previous_PRICE,@current_price)
update lz_Domestic_exfactory_price set
index_id=CONVERT(varchar(8) ,price_date, 112) + Replace(CONVERT(varchar(20) ,getdate(), 108) ,':' ,'') + right(cast(power(10,9) as varchar)+lz_Domestic_exfactory_price_id,9)
,change_Rate=@current_price-@Previous_PRICE
where lz_Domestic_exfactory_price_id=@id
set @next_id = ( SELECT TOP 1 lz_Domestic_exfactory_price_id FROM lz_Domestic_exfactory_price WHERE lz_Domestic_exfactory_product_id =@product_id and DATEDIFF(day,price_date,@current_date)<0 order by price_date asc )
if @next_id is not null
Begin
update lz_Domestic_exfactory_price set change_Rate=exfactory_price-@current_price where lz_Domestic_exfactory_price_id=@next_id
end
DECLARE @last_date datetime
set @last_date = ( select last_date from lz_Domestic_exfactory_product where lz_Domestic_exfactory_product_id=@product_id)
If DateDiff(day,@last_date,@current_date)>=0
Begin
update lz_Domestic_exfactory_product set memo=@memo,last_date=@current_date,last_exfactory_price=@current_price, Last_change_Rate=@current_price-@Previous_PRICE,modify_date=getdate() where lz_Domestic_exfactory_product_id=@product_id
End
Else
Begin
update lz_Domestic_exfactory_product set modify_date=getdate() where lz_Domestic_exfactory_product_id=@product_id
End
--print @next_id
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_DELETE_lz_Domestic_exfactory_price] ON [dbo].[lz_Domestic_exfactory_price]
FOR DELETE
AS
BEGIN
DECLARE @product_ID INT
DECLARE @price_date datetime
DECLARE @p_price_date datetime
DECLARE @p_exfactory_price float
DECLARE @p_Change_Rate int
SET NOCOUNT ON;
/*
SET @price_date = (SELECT price_date FROM Deleted)
SET @product_ID = (SELECT lz_Domestic_exfactory_product_id FROM Deleted)
DECLARE @last_date datetime
set @last_date = ( select last_date from lz_Domestic_exfactory_product where lz_Domestic_exfactory_product_id=@product_ID)
If DateDiff(day,@last_date,@price_date)=0
Begin
--查找相关数据进入游标
DECLARE TR_DELETE_lz_Domestic_exfactory_price_cursor CURSOR FOR
SELECT TOP 1 price_date,exfactory_price,Change_Rate FROM lz_Domestic_exfactory_price
WHERE lz_Domestic_exfactory_product_id =@product_id
order by price_date desc
OPEN TR_DELETE_lz_Domestic_exfactory_price_cursor
FETCH NEXT FROM TR_DELETE_lz_Domestic_exfactory_price_cursor
INTO @p_price_date,@p_exfactory_price,@p_Change_Rate
CLOSE TR_DELETE_lz_Domestic_exfactory_price_cursor
DEALLOCATE TR_DELETE_lz_Domestic_exfactory_price_cursor
--结束游标
update lz_Domestic_exfactory_product set last_date=@p_price_date,last_exfactory_price=@p_exfactory_price, Last_change_Rate=@p_Change_Rate where lz_Domestic_exfactory_product_id=@product_id
End
--print @next_id
*/
Update lz_Domestic_exfactory_product set
last_date=(select top 1 price_date from lz_Domestic_exfactory_price WHERE lz_Domestic_exfactory_product_id =I.lz_Domestic_exfactory_product_id and lz_Domestic_exfactory_price_id not in (select lz_Domestic_exfactory_price_id from Deleted ) order by price_date desc ),
last_exfactory_price=(select top 1 exfactory_price from lz_Domestic_exfactory_price WHERE lz_Domestic_exfactory_product_id =I.lz_Domestic_exfactory_product_id and lz_Domestic_exfactory_price_id not in(select lz_Domestic_exfactory_price_id from deleted) order by price_date desc ),
Last_change_Rate=(select top 1 Change_Rate from lz_Domestic_exfactory_price WHERE lz_Domestic_exfactory_product_id =I.lz_Domestic_exfactory_product_id and lz_Domestic_exfactory_price_id not in(select lz_Domestic_exfactory_price_id from deleted) order by price_date desc )
from lz_Domestic_exfactory_product P inner join Deleted I
ON P.lz_Domestic_exfactory_product_id = I.lz_Domestic_exfactory_product_id
SET NOCOUNT OFF;
END
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_lz_DataSupportMemo_Insert] ON [dbo].[lz_DataSupportMemo]
FOR INSERT,UPDATE
AS
SET NOCOUNT ON
if update(PostDate) Or Update (yy) or Update(MM)
Begin
update [lzlt].[dbo].[lz_DataSupportMemo] set
index_id=CONVERT(varchar(8) ,I.PostDate, 112) + cast(I.yy as varchar) + right(cast(power(10,2) as varchar)+I.mm,2) + right(cast(power(10,9) as varchar)+I.id,9)
from [lzlt].[dbo].[lz_DataSupportMemo] P
inner join Inserted I On P.Id = I.ID
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_lz_DataSupport_deleted] ON [dbo].[lz_DataSupport]
FOR delete
AS
SET NOCOUNT ON
Begin
delete from lz_DataSupportMemo
Where sid in (select sid from deleted)
End
SET NOCOUNT OFF
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [TR_UPDATE_LZ_Columns] ON [dbo].[LZ_Columns]
FOR UPDATE
AS
BEGIN
DECLARE @ColumnID int
DECLARE @ParentID int
DECLARE @f_ColumnID INT
DECLARE @f_ParentID int
DECLARE @f_ParentStr nvarchar(250)
DECLARE @f_Depth int
DECLARE @f_RootID int
DECLARE @f_Child int
DECLARE @f_orders int
DECLARE @f_ClassStr nvarchar(250)
SET NOCOUNT ON;
If Update(ParentID)
Begin
DECLARE @ParentStr nvarchar(250)
DECLARE @ClassStr nvarchar(250)
DECLARE @OldParentStr nvarchar(250)
DECLARE @OldParentID int
DECLARE @OldDepth int
DECLARE @Depth int
DECLARE @Child int
DECLARE @orders int
DECLARE @RootID int
SET @ColumnID = (SELECT ColumnID FROM Inserted)
SET @ParentID = (SELECT ParentID FROM Inserted)
SET @OldParentID = (SELECT OldParentID FROM Inserted)
SET @OldParentStr = (SELECT ParentStr FROM Inserted)
SET @OldDepth = (SELECT Depth FROM Inserted)
SET @Child = (SELECT Child FROM Inserted)
If @OldParentID<>@ParentID --如果改变得了父ID
Begin
If @ParentID = 0
Begin
SET @RootID = @ColumnID
SET @Depth = 0
--set @ParentStr = ','+ CONVERT(varchar(10) ,@ColumnID) +','
set @ParentStr = ''
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_Columns] where ParentID=@ParentID )
Update [dbo].[LZ_Columns] SET OldParentID=@ParentID,ParentStr=',0,',Depth=0,RootID=@ColumnID,orders=@orders+1,classstr=','+CONVERT(varchar(10) ,@ColumnID)+','
WHERE ColumnID=@ColumnID
End
Else
Begin
--@ColumnID,@ParentID,@ParentStr,@Depth,@RootID,@Child,@orders,@ClassStr
--查找相关数据进入游标
DECLARE TR_INSERT_LZ_Columns_cursor CURSOR FOR
SELECT Top 1 ColumnID,ParentID,ParentStr,Depth,RootID,Child,orders,ClassStr FROM [dbo].[LZ_Columns]
WHERE ColumnID = @ParentID
OPEN TR_INSERT_LZ_Columns_cursor
FETCH NEXT FROM TR_INSERT_LZ_Columns_cursor
INTO @f_ColumnID,@f_ParentID,@f_ParentStr,@f_Depth,@f_RootID,@f_Child,@f_orders,@f_ClassStr
CLOSE TR_INSERT_LZ_Columns_cursor
DEALLOCATE TR_INSERT_LZ_Columns_cursor
--结束游标
If @f_ParentStr=',0,'
Begin
set @ParentStr = ','+ CONVERT(varchar(10) ,@f_ColumnID) +','
End
Else
Begin
set @ParentStr = @f_ParentStr + CONVERT(varchar(10) ,@f_ColumnID) + ','
End
SET @RootID = @f_RootID
SET @Depth = @f_Depth+1
SET @orders = (SELECT IsNULL(max(orders),0) FROM [dbo].[LZ_Columns] where ParentID=@ParentID )
Update [dbo].[LZ_Columns] SET
OldParentID=@ParentID,ParentStr=@ParentStr,Depth=@f_Depth+1,RootID=@f_RootID,orders=@orders+1,classstr=@f_ClassStr+CONVERT(varchar(10) ,@ColumnID)+','
WHERE ColumnID=@ColumnID
-- update [dbo].[LZ_Columns] set Child = Child + 1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@ParentID))
End
If @Child > 0 --如果有子节点
Begin
If @OldParentID = 0
Begin
Update [dbo].[LZ_Columns] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=SUBSTRING(@ParentStr,1,len(@ParentStr)-1)+ParentStr
,classstr=SUBSTRING(@ParentStr,1,len(@ParentStr)-1)+classstr
Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_GetChildren](@ColumnID))
End
Else
Begin
If @ParentID = 0
Begin
Update [dbo].[LZ_Columns] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=','+replace(ParentStr,@oldParentStr,@ParentStr)
,classstr=','+replace(classstr,@oldParentStr,@ParentStr)
Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_GetChildren](@ColumnID))
End
else
Begin
Update [dbo].[LZ_Columns] set
Depth=Depth + @Depth-@oldDepth,RootID=@RootID
,ParentStr=replace(ParentStr,@oldParentStr,@ParentStr)
,classstr=replace(classstr,@oldParentStr,@ParentStr)
Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_GetChildren](@ColumnID))
end
End
update [dbo].[LZ_Columns] set Child = Child + @Child + 1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@ParentID))
End
Else
Begin
update [dbo].[LZ_Columns] set Child = Child + 1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@ParentID))
end
If @OldParentID > 0
Begin
If @Child > 0 --如果有子节点
Begin
update [dbo].[LZ_Columns] set Child = Child - @Child -1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@oldParentID))
End
Else
Begin
update [dbo].[LZ_Columns] set Child = Child - 1 Where ColumnID in (select ColumnID from [dbo].[GetLz_Columns_Parent](@oldParentID))
End
End
end
End
SET NOCOUNT OFF
END
发表评论
-
INSERT ALL和INSERT FIRST语法
2012-04-10 16:54 13在数据仓库中的转换和装载过程中,可能会使用INSERT ALL ... -
oracle字符集及编码知识
2011-07-19 17:58 3281摘要: 1,双字节字符 ... -
sqlldr导入Sequence等类型数据
2011-05-22 14:43 3173sqlldr导入Sequence等类型数据 目标表SQL: ... -
JAVA查询Oracle数据库集群连接字符串及其JDBC jar包选择
2011-02-22 17:11 2548事件: 报表接口数据库突然无法连接 ,导致无法正常取数操作. ... -
DB2基本概念 —— 实例、数据库、表空间、容器
2010-12-24 10:06 5399DB2支持以下两种类型的表空间: 1、 系统管理存储 ... -
PreparedStatement的用法
2010-12-10 17:15 1079jdbc(java database connectivity ... -
DB2中有关日期和时间的函数,及应用
2010-11-01 09:34 1641DAYNAME 返回一个大小写混合的字符串,对 ... -
SQL中UNION和UNION ALL区别
2010-06-10 11:38 2565在数据库中,UNION和UNION ALL关键字都是将两个结果 ... -
sql 特殊字符处理
2010-05-14 10:05 2531用户输入如果没有任何限制的话,则必须对特殊字符进行变换。 如果 ... -
数据库索引的作用
2010-05-05 17:06 7082索引 可以利用索引快 ... -
db2中的连接查询,内连接、外连接、交叉连接
2010-04-19 11:03 3564DB2 连接查询的学习: [size=large] 首先 ...
相关推荐
### SQL Server 触发器详解 #### 一、触发器概念 触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。通过这种方式,触发器能够...
Sqlserver 触发器例子 Sqlserver 触发器是指在 Sqlserver 数据库中,对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。常见的触发器有三种:分别应用于 Insert、Update、...
### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...
总结,SQL Server 2005中的触发器是数据库设计的重要组成部分,它们提供了一种灵活的方式来处理数据变更时的复杂业务逻辑。理解并熟练使用触发器可以帮助开发者确保数据一致性,增强系统的功能,并提高数据管理的...
### SqlServer触发器详解与案例分析 #### 一、触发器概述 触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者...
SqlServer触发器例子 SqlServer触发器是数据库系统中的一种特殊的存储过程,它可以在某一个表的一定操作时触发某种条件,从而执行一段程序。 SqlServer触发器可以应用于Insert、Update、Delete等事件。 触发器的...
SQL Server触发器是数据库管理系统中一种非常重要的特性,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为触发事件,而触发器则是对这些事件的响应。理解并...
sqlserver 触发器 insert阿 一个关于触发器的小例子
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
根据给定的文件信息,我们可以深入探讨如何在SQL Server中创建一个触发器,该触发器在新用户添加到系统时自动发送电子邮件和短信通知。这一技术应用广泛于各种需要即时通知用户注册确认、账户激活或密码重置的场景中...
SQL Server的触发器是一种特殊的存储过程,它在特定的数据操作事件(INSERT、UPDATE或DELETE)发生时自动执行,用于扩展数据库系统的功能,实现更复杂的业务逻辑。触发器可以帮助确保数据完整性,实现级联操作,或者...
本文将详细介绍SQL Server 2000中触发器的类型、作用以及触发器的执行机制。 首先,触发器的主要作用包括: 1. 自动执行:触发器在数据库表中的数据发生变化之后立即被激活,无需手动调用。 2. 级联更改:触发器...
在SQL Server中,触发器是一种数据库对象,它可以在数据更改(INSERT、UPDATE或DELETE)时自动执行。在处理大量数据的Merge操作时,触发器可能会一次性处理多行,这可能导致性能问题或者不符合预期的行为。标题和...
在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT,UPDATE或DELETE)发生时自动执行。触发器可以用于实现复杂的业务规则和数据验证,以确保数据库中的数据完整性。在这个例子中,我们关注的...
在SQL Server中,数据库触发器是一种特殊的存储过程,它...这些示例对于学习和理解SQL Server触发器的功能和使用非常有帮助。在实际的数据库设计中,我们可以根据业务需求灵活地利用触发器来维护数据的一致性和完整性。
SQL Server中的触发器是数据库对象的一种,主要用于在特定的数据操作(如INSERT、UPDATE、DELETE)发生时自动执行一些额外的任务,以确保数据的完整性和一致性。触发器不能像普通存储过程那样被显式调用,而是隐式地...
标题"SQLSERVER2000数据库例子"指的是这个压缩包包含的是SQL Server 2000的一些示例数据库,这些示例通常用于教学、学习和测试环境,帮助用户了解如何设计、创建和管理数据库。这些例子可以展示SQL Server 2000的...
SQL Server的嵌套触发器设计是一项复杂但至关重要的任务,特别是在维护数据完整性和一致性时。触发器是一种在数据库中预定义的程序,当特定的DML(数据操纵语言)操作,如INSERT、UPDATE或DELETE,发生在相关表上时...