Êý¾Ý¿âÔÀíÓëÓ¦ÓÿγÌʵÑéÖ¸µ¼Êé
2¡¢Óû§×Ô¶¨ÒåÊý¾ÝÀàÐͶ¨Ò塢ʹÓúÍɾ³ý
ÓÃSQLÃüÁÒåÒ»ÃûΪCustomer_idµÄÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬ÒªÇóchar(6)£¬NOT NULL£¬ ²¢°Ñ¸Ã×Ô¶¨ÒåÊý¾ÝÀàÐÍÓÃÀ´¶¨ÒåXSS±íÖеĿͻ§±àºÅ£¬È»ºóɾ³ý¸Ã×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬ÇëÐðÊö¸Ã¹ý³Ì£¬²¢Ð´³öÏà¹ØÓï¾ä¡£
sp_addtype 'Customer_id','char(6)','not null' sp_droptype 'Customer_id'
ÏÈÓô´½¨Óï¾ä×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬È»ºó´ò¿ª¡°Êý¾Ý¿â-CPXSB-±í¡±£¬ÓÒ»÷XSS,Ñ¡Ôñ¡°Éè¼Æ±í¡±£¬½«¿Í»§±àºÅµÄÊý¾ÝÀàÐÍ ¸ÄΪCustomer_id,±£´æ¼´¿É
½«¿Í»§±àºÅµÄÊý¾ÝÀàÐ͸ĻØchar(6),È»ºóÓõڶþ¸öÓï¾äɾ³ý¸ÃÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ
3¡¢T-SQLÓïÑÔ±à³Ì
£¨1£©ÓÃT-SQLÓïÑÔ±à³ÌÊä³ö3¡«300Ö®¼äÄܱ»7Õû³ýµÄÊý¡£ declare @i int,@j int set @i=3 set @j=7
while @i<=300 begin
if(@i%@j)=0 print @i
set @i=@i+1 end
£¨2£©ÓÃT-SQLÓïÑÔ±à³ÌÊä³ö3¡«100Ö®ÄÚµÄËØÊý¡£ declare @i int,@j int,@t int set @i=3
while @i<100 begin
set @j=2 while @j<@i begin
set @t=@i%@j if @t=0 break set @j=@j+1
45
if(@j>=@i) print @i end
set @i=@i+1 end
ʵÑéÊ®
1¡¢º¯ÊýµÄ¶¨Òå
¶ÔÓÚCPXSÊý¾Ý¿â£¬¶¨ÒåÍê³ÉÈçϹ¦Äܵĺ¯Êý£º £¨1£©¾Ý²úÆ·Ãû³Æ£¬²éѯ¸Ã²úÆ·µÄÏà¹ØÐÅÏ¢£»£¨º¯ÊýÃûΪFU_CP£© create function FU_CP(@²úÆ·Ãû³Æ char(30)) returns table as return
select * from CP where ²úÆ·Ãû³Æ=@²úÆ·Ãû³Æ
£¨2£©°´Ä³Äêij¼¾¶Èͳ¼Æ¸ø¶¨²úÆ·Ãû³ÆµÄÏúÊÛÊýÁ¿¼°ÏúÊÛ½ð¶î£»·Ö±ðÓÃÃûΪFU1_CPXSÄÚǶ±íÖµº¯ÊýºÍÃûΪFU2_CPXSµÄ¶àÓï¾ä±íÖµº¯Êý¡£
create function FU1_CPXS(@year int,@quarter int,@²úÆ·Ãû³Æ char(30)) returns table as return
select ²úÆ·Ãû³Æ,sum(ÊýÁ¿) as ÏúÊÛÊýÁ¿,sum(ÏúÊÛ¶î) as ÏúÊÛ½ð¶î from CP,CPXSB
where CP.²úÆ·±àºÅ=CPXSB.²úÆ·±àºÅ and datepart(yy,ÏúÊÛÈÕÆÚ)=@year and datepart(qq,ÏúÊÛÈÕÆÚ)=@quarter and ²úÆ·Ãû³Æ=@²úÆ·Ãû³Æ group by ²úÆ·Ãû³Æ
create function FU2_CPXS(@year int,@quarter int,@²úÆ·Ãû³Æ char(30)) returns @f2 table (
²úÆ·Ãû³Æ char(30), ÏúÊÛÊýÁ¿ int, ½ð¶î real ) as begin
insert into @f2
select ²úÆ·Ãû³Æ,sum(ÊýÁ¿) as ÏúÊÛÊýÁ¿,sum(ÏúÊÛ¶î) as ½ð¶î from CP,CPXSB
where CP.²úÆ·±àºÅ=CPXSB.²úÆ·±àºÅ and datepart(yy,ÏúÊÛÈÕÆÚ)=@year
46
Êý¾Ý¿âÔÀíÓëÓ¦ÓÿγÌʵÑéÖ¸µ¼Êé
and datepart(qq,ÏúÊÛÈÕÆÚ)=@quarter and ²úÆ·Ãû³Æ=@²úÆ·Ãû³Æ group by ²úÆ·Ãû³Æ return end
£¨3£©¸ù¾ÝÏúÊÛÉÌÃû³Æ£¬Í³¼ÆÆäÔÚijÄêij¼¾¶ÈÄÚÏúÊÛÉÌÆ·Ãû³Æ¡¢ÊýÁ¿¼°½ð¶î¡££¨º¯ÊýÃûΪFU3_CPXS£©
create function FU3_CPXS(@¿Í»§Ãû³Æ char(30),@year int,@quarter int) returns table as return
select ¿Í»§Ãû³Æ,²úÆ·Ãû³Æ as ÏúÊÛÉÌÆ·Ãû³Æ,ÊýÁ¿,ÏúÊÛ¶î as ½ð¶î from CP,XSS,CPXSB
where CPXSB.²úÆ·±àºÅ=CP.²úÆ·±àºÅ and CPXSB.¿Í»§±àºÅ=XSS.¿Í»§±àºÅ
and ¿Í»§Ãû³Æ=@¿Í»§Ãû³Æ and datepart(yy,ÏúÊÛÈÕÆÚ)=@year and datepart(qq,ÏúÊÛÈÕÆÚ)=@quarter
2¡¢º¯ÊýµÄµ÷ÓÃ
£¨1£©¶Ôº¯ÊýFU_CP£¬²éѯ²úÆ·Ãû³ÆÎª¡°mp3¡±µÄ²úÆ·Çé¿ö£» select * from FU_CP('MP3')
£¨2£©¶Ôº¯ÊýFU1_CPXS£¬²éѯ2004ÄêµÚ3¼¾¶È²ÊÉ«µçÊÓ»úµÄÏúÊÛÊýÁ¿ºÍÏúÊÛ½ð¶î£» select * from FU1_CPXS(2004,3,'²ÊÉ«µçÊÓ»ú')
£¨3£©¶Ôº¯ÊýFU2_CPXS£¬²éѯ2004ÄêµÚ1¼¾¶ÈÏ´Ò»úµÄÏúÊÛÊýÁ¿ºÍÏúÊÛ½ð¶î£»
select * from FU2_CPXS(2004,1,'Ï´Ò»ú')
£¨4£©¶Ôº¯ÊýFU3_CPXS£¬²éѯ¹ãµç¹«Ë¾2004ÄêµÚ1¼¾¶ÈÏúÊ۵IJúÆ·Ãû³Æ¡¢ÏúÊÛÊýÁ¿ºÍÏúÊÛ½ð¶î¡£
select * from FU3_CPXS('¹ãµç¹«Ë¾',2004,1)
47
ʵÑéʮһ ¶ÔÓÚCPXSÊý¾Ý¿â£¬Íê³ÉÈçϲÙ×÷£º 1¡¢Ë÷ÒýµÄ´´½¨ºÍɾ³ý
£¨1£©¶ÔCP±í£¬ÔÚ²úÆ·Ãû³ÆÉ϶¨ÒåÒ»¸öΨһ·Ç¾Û´ØµÄË÷Òýind_cp¡£ create unique nonclustered index on CP(²úÆ·Ãû³Æ)
£¨2£©ÏÈ´´½¨¸÷¿Í»§¹ºÂò²úÆ·µÄÇé¿öVIEW1ÊÓͼ£¬°üÀ¨¿Í»§±àºÅ¡¢¿Í»§Ãû³Æ¡¢²úÆ·±àºÅ¡¢²úÆ·Ãû³Æ¡¢
¼Û¸ñ£¬¹ºÂòÈÕÆÚ¡¢¹ºÂòÊýÁ¿£¬È»ºóÔÚ¿Í»§±àºÅ+²úÆ·±àºÅ+¹ºÂòÈÕÆÚ¶¨ÒåÒ»¸öΨһ¾Û´ØË÷Òýind_view1¡££¨Çë×¢Òâ7¸öSETÑ¡ÏîÉèÖã©¡£ create view view1 with schemabinding as
select XSS.¿Í»§±àºÅ,¿Í»§Ãû³Æ,CP.²úÆ·±àºÅ,²úÆ·Ãû³Æ,¼Û¸ñ,ÏúÊÛÈÕÆÚ as ¹ºÂòÈÕÆÚ,ÊýÁ¿ as ¹ºÂòÊýÁ¿
from dbo.CP,dbo.XSS,dbo.CPXSB
where XSS.¿Í»§±àºÅ=CPXSB.¿Í»§±àºÅ and CP.²úÆ·±àºÅ=CPXSB.²úÆ·±àºÅ
SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF
create unique clustered index ind_view1 on dbo.view1(¿Í»§±àºÅ,²úÆ·±àºÅ,¹ºÂòÈÕÆÚ)
2¡¢Ë÷ÒýµÄɾ³ý
ɾ³ýind_view1Ë÷Òý¡££» drop index view1.ind_view1
48