Êý¾Ý¿âÔ­ÀíÓëÓ¦ÓÃ¿Î³Ì ÊµÑéÖ¸µ¼Êé(¸½´ð°¸) ÏÂÔØ±¾ÎÄ

Êý¾Ý¿âÔ­ÀíÓëÓ¦ÓÿγÌʵÑéÖ¸µ¼Êé

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