SQL学习

SQL游标学习游标一般格式:
2{&c"L8f:^#x!u$|6X-xbbs.54master.comDECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
(|/_%v0q(c$]2V6j:ROPEN 游标名称- 畅通网络 因为有我6S-M9R-h4p*f"A
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!)@:P:I"\(`1i1a6i1d
WHILE @@FETCH_STATUS=0
:w%d$N*l7A$[网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        BEGIN!T;e$N2t;Q+H2N2A6C"o
                  SQL语句执行过程... ...
)E5~9d$m9`;r7U*Kbbs.54master.com                  FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...bbs.54master.com;P$E!a#t&N*k*o3Y1T
        END
$W#v2\$d1k我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!CLOSE 游标名称
&_1e7w4b&}#b.];K"v我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DEALLOCATE 游标名称
(@.]1j;j;{bbs.54master.com例子:我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!$}7f/r$N#Y
/*2Z$a7E$}-O.\6I7@*v9Q
功能:数据库表格tbl_users数据
,E"g9|+s1r9A'N+_网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术deptid userid username
&^*T-g4e1q&W$P j1          100      abbs.54master.com3X d'L9{6w-V
1      101      b
%R+]:S(_)i:?0I.}2      102      c- 畅通网络 因为有我/p \%r;r!q"f'l.Y
要求用一个sql语句输出下面结果bbs.54master.com3Z8{8L.L)u;m+j
deptid username我是网管论坛.Q;e&S9L:~-p&x%Z:O
1        abbbs.54master.com0q:O5Z3O0C1z1]3~#k:|
2        c网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术9O!{#X _([2n1@
[要求用游标实现]- 畅通网络 因为有我0~:Y5X k3h;Q O!J O

"}7|%@4{9G1M9s'Wbbs.54master.com设计: OK_008我是网管论坛5l#T6p1_*@'O
时间: 2006-05- 畅通网络 因为有我$R;M5X(j&Y*m/U
备注:无网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术,y/`']0N,H-m2q
*/
:h7~ e2D&R,z2Z%v(H- 畅通网络 因为有我create table #Temp1(deptid int,userid int,username varchar(20)) --待测试的数据表网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术 X I1Z4C&h:X
create table #Temp2(deptid int,username varchar(20))                --结果表bbs.54master.com7w+l9J,u/j9^
--先把一些待测试的数据插入到待测试表#Temp1中
:f0W3S"o)A- 畅通网络 因为有我insert into #Temp1我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!"T"v!r;y%o6L${%h8q
select 1,100,'a' union allbbs.54master.com2L2C#W/k9x1@%O9v;t
select 1,101,'b' union all我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!5G,b.t O1M.k&[:Q
select 1,131,'d' union all- 畅通网络 因为有我%R1h:p*x4w
select 1,201,'f' union all
6^2u!o"V6n+W#f/n%?- 畅通网络 因为有我select 2,302,'c' union all 我是网管论坛7P*s#p4])~8e6m
select 2,202,'a' union all
/L(A*|&j&z- 畅通网络 因为有我select 2,221,'e' union all
'Y8P:E"e3S&^我是网管论坛select 3,102,'y' union all 5L+T-^:y)\+o
select 3,302,'e' union allbbs.54master.com9o"{+F7E4k
select 3,121,'t'
8I(V"b-n%|0W&l'G4I我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!--- 畅通网络 因为有我 k4]"k4U-^'F!A
declare @deptid int,@username varchar(20)3b+_#f)h*X4I3m9|/n
--定义游标
$\(i*e3G%t*K%Y#G$f5J- 畅通网络 因为有我declare Select_cursor cursor for我是网管论坛7z1Y&K!`9_9a3n6Q,J
        select deptid,username from #Temp11T3f+b+M"G%m%\;b
open Select_cursor网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术+d6R-\%X&|'Y0H
fetch next from Select_cursor into @deptid,@username    --提取操作的列数据放到局部变量中
3u&l'A4Z1I#G我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!while @@fetch_status=0      --返回被 FETCH 语句执行的最后游标的状态
e9r.g9]:b5t/*
#{9P&M'l)E3}7i)Z- 畅通网络 因为有我@@FETCH_STATUS =0          FETCH 语句成功我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!1L0O&O,a'V"s4p
@@FETCH_STATUS =-1 FETCH 语句失败或此行不在结果集中我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!3c3o9i;_%J%G8v-|4f
@@FETCH_STATUS =-2 被提取的行不存在
/Y$g3]%r1u&u3u-]网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术*/0i9k&X2O6w;L9S8?/t
        begin%j$e&u$X-c9z4]#|
                  --当表#Temp2列deptid存在相同的数据时,就直接在列username上追加@username值
/X+Y!E0? `'l2t'\&u:X我是网管论坛                  if(exists(select * from #Temp2 where deptid=@deptid )) 我是网管论坛3A&g#{8j*B%]9r
                            update #Temp2 set username=username +@username where deptid=@deptid我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!&?2K8h8K+h.{&Y"K*x!g(I
                  else '@#j5] V't0h&K5X4z
                  --插入新数据
7u5y;k%g"t.E!I网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                            insert into #Temp2 select @deptid,@username
;W-\&p;},o.A!u/Ibbs.54master.com                  fetch next from Select_cursor into @deptid,@username
$j d1]2d;s,Bbbs.54master.com        end- 畅通网络 因为有我*i7z#E2v!w
close Select_cursor      我是网管论坛&L7a!y,c#Z"`8M/J'a
deallocate Select_cursor- 畅通网络 因为有我/U-Q+r+u;C
select * from #Temp2 --测试结果我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!4x+v6n)V D'j
Drop table #Temp1,#Temp2
7g.o6G%P*q-H;d6e我是网管论坛我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!0L.Z9`-j,_-M8y2v&b
我是网管论坛;D0u&f$D"m#p7r6M
- 畅通网络 因为有我5C+z4Z:l5V(b
[ 本帖最后由 DVD 于 2006-12-14 17:08 编辑 ] 作者: DVD    时间: 2006-12-14 16:36

自动生成表的更新数据的存储过程设计原因:在数据库设计中,有时候建立了很多表,每个表都有Insert、Update、Delete结构基本相同的存储,要是能有个自动生成表的更新数据的存储过程,就方便了我们不必浪费时间去写每一张表的Insert、Update、Delete存储过程。
/|%d3h+w)J,q+W网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术设计方法:先提取表的各字段信息,包含字段的数据类型、数据定义长度、是否主键等。再根据提取出来的信息构造成表的更新数据的存储过程。下面的方法是有一个用户自定义函数FN_GetObjColInfo和一个存储过程SP_CreateProcdure来实现。我是网管论坛-g2n'c%^/{+J
网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术,O w0Q3q&J&s'S
用户自定义函数FN_GetObjColInfo:
7q"@/Z7a$o n6M(x7M5B我是网管论坛bbs.54master.com2m%a!y.\6S*v4U'q
/*
7~.q%@2m0U6Y8|(f我是网管论坛功能:返回某一表的所有字段、存储过程、函数的参数信息
%q:z-y1O/b&v2{$~我是网管论坛设计:OK_008;w.E,k1K"x){+X%`
时间:2006-05
&y5W%j%y2U网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术*/bbs.54master.com"M!t3Y'~"Q']
CREATE FUNCTION FN_GetObjColInfo/`#o2[.s"V,C;e:e
(@ObjName varchar(50))
-i2`4m-h%u5e,o.T0O9z我是网管论坛RETURNS  @Return_Table TABLE(- 畅通网络 因为有我1r5M6`2A6}&p/h%L
                  TName nvarchar(50),bbs.54master.com9`5`)}%q#}7t5U)y
                  TypeName nvarchar(50),bbs.54master.com C5N0H4W4E(q2j,c5J
                  TypeLength nvarchar(50),我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!(O&K8E(o1u8y
                  Colstat      Bit- 畅通网络 因为有我/L/G A2c6E-y,v
                  )  bbs.54master.com)X8S/|$V:n1l8E!l7W
AS 
:E!h-Z!w7]8J1_!i(_- 畅通网络 因为有我BEGIN
/E:U+r#O*~&P6^#]*V我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        INSERT  @Return_Table 0n)K/K5e'U9f3w
                  /*网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术5}&e&P6X+L;^5u!k
                  主要是从系统表中提取表(对象)的各字段信息。
%i(L3g"D.@*M                  sysobjects: 在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行bbs.54master.com0`:H'O'q1S%w
                  syscolumns:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行
7G7{.U7q,[:?2Y/i/u我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!                  systypes: 保存数据类型和用户定义数据类型bbs.54master.com!U$o V+p&['b([
                  */网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术*E$V1c:y"a5_+r9v*}4B0A:Y
                  select b.name as 字段名,c.name as 字段类型,b.length/2 as 字段长度,b.colstat as 是否自动增长我是网管论坛&z4h1I!\+c$~"q
                  from sysobjects a 网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术4E!o2~'G.e5a;U2c
                  inner join syscolumns b on a.id=b.id - 畅通网络 因为有我0k5c(S'L/I1E1C
                  inner join systypes c on c.xusertype=b.xtype - 畅通网络 因为有我4]*k:h:P$T'`6k8p"N5M
                  where a.name =@ObjName
$H0w e,Z4e7t$^bbs.54master.com                  order by  B.ColID
;E(W/U.A+A(} V6Y2K        RETURN9@&N-b+r(h,`6p+N9E;P)H
END网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术/L })N#[2X&O-X
GO
-`2n3`&_0z存储过程SP_CreateProcdure:- 畅通网络 因为有我)t ^+l#e9o;N.j
bbs.54master.com'i0u$J*?)h/o1v
- 畅通网络 因为有我4?!v,R,u$}(E+?5d

6P2u$B(v2k.h:G-e网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术
;@-m-m1V,Ibbs.54master.comCREATE PROCEDURE SP_CreateProcdure- 畅通网络 因为有我1b:} u%c9v-D&V2w+n1T1w F8P
@TableName nvarchar(50)
"P*m2X"H(c-M1i:F- 畅通网络 因为有我AS
)M5A Q.U.W8u3w网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术/*- 畅通网络 因为有我3@$W1y)P6j#l:H3W/s
功能: 自动生成表的更新数据的存储过程我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!2[+N(~!u,@%{
              如:当建立表MyTable后,执行SP_CreateProcdure ,生成表MyTable的数据更- 畅通网络 因为有我'?7|*i*O7Q0{ ['y&s
                新的存储过程UP_MyTablebbs.54master.com#|!Q#`*W,E'c
设计: OK_008
2b&y/o3]*t"sbbs.54master.com时间: 2006-05我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!,@)Q(T0@&z:w1S/_
备注:
t(D1`9@7t6x:N网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        1、请在查询分析器上执行:EXEC SP_CreateProcdure TableName
(X8d!n2J9|9|;B#i我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        2、由于生成的字符串长度合计很多时候存在>4000以上,所有只使用Print输出,网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术&M1_0]2{ [
              再Copy即可。
.['|0l2v8C9n0f#a4x我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        3、该方法能生成一般表的更新数据的存储过程,其中更新格式可以根据实际bbs.54master.com%T${$v%{4T V/j.K
              情况修改。
1c+w"a2y!R!t9~-X;C7L设计方法:
!l2s"~0`5i5@0D网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        1、提取表的各个字段信息我是网管论坛,^ P;I2X)O%J)_"w
        2、 ──┰─ 构造更新数据过程bbs.54master.com ?1N"h%~6k1H-u
                        ├─ 构造存储过程参数部分网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术8U!`#p*j2{$R
                        ├─ 构造新增数据部分
5~.j;e-x9D+}8S8o)R我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!                        ├─ 构造更新数据部分
,{4W!}5S)d!q.l-N网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                        ├─ 构造删除数据部分
(k(I"}$[(b!p        3、分段PRINT
2U,J5a"i%P4M我是网管论坛        4、把输出来的结果复制到新建立存储过程界面中即可使用。
#G;p X$c,o:f2m Sbbs.54master.com*/bbs.54master.com-c4j,@6r(N'B2f/x
DECLARE @strParameter nvarchar(3000)
5N1n8k&`9D"~+]我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DECLARE @strInsert nvarchar(3000)- 畅通网络 因为有我4z*M,u'E/J0|.}
DECLARE @strUpdate nvarchar(3000)我是网管论坛;p7r:Z!H8z7v2x8G-~
DECLARE @strDelete nvarchar(500)
"[,`1p"D'`6Z$K"l'G+S:S0{5n我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DECLARE @strWhere  nvarchar(100)- 畅通网络 因为有我,^)V1c*F#G3~-I$}0S&d8p2@
DECLARE @strNewID  nvarchar(100)
5D5o4f/n6p)H3B网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术DECLARE @SQL_CreateProc nvarchar(4000)0Z*A/V/S'c%U&{

U#w1`1E-`,I USET @SQL_CreateProc='CREATE PROCEDURE UP_'+@TableName +char(13)+'@INTUpdateID int,' +' /* -1 删除  0 修改  1新增 */'网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术%T1M%[(T'Z3G"h2n
SET @strParameter=''网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术.v5X.k3{)e0h$@!L%B3E
SET @strInsert=''我是网管论坛8p7h:x4\#]3X;J.O
SET @strUpdate=''
#q7E4J(G6}+\.a网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SET @strWhere=''
3v;O,v#x8C+Z%O(\我是网管论坛
6K4Q9v"S(p)@- 畅通网络 因为有我DECLARE @TName nvarchar(50),@TypeName nvarchar(50),@TypeLength nvarchar(50),@Colstat bit
0D+^6c(y(_&u.d.Q$U我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DECLARE Obj_Cursor CURSOR FOR
2L2c0n4Z'^- 畅通网络 因为有我SELECT * FROM  FN_GetObjColInfo(@TableName)- 畅通网络 因为有我)i9W"Y!X1A1Z*_7z$W
OPEN Obj_Cursor网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术&_;y P*b2r6V4p!["C:@2m&['K
FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat
'I2D%\6Z F5E5K网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术WHILE @@FETCH_STATUS=0
!e6?5y9j5]  BEGIN
,z${8f5h&K,R;u:v:k网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        --构造存储过程参数部分
0S'i,\!~;c        SET @strParameter=@strParameter +CHAR(13)+'@'+ @TName + ' ' +@TypeName+我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!.W6n4N+J2X5X
                                    (CASE
.D+R n#{$f8V%q!z!U)d                                    WHEN @TypeName='nvarchar' THEN '('+@TypeLength+')'bbs.54master.com#M;t3N3B%F8?!m E
                                    ELSE ''.x-s u'B9i2f.V+l
                                    END)+','我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!8^0m Y)H.U7x%D,}2U1y5Q
        --构造新增数据部分
$o&h#h5w+\-@-T![我是网管论坛        IF @Colstat=0 SET @strInsert=@strInsert + '@'+ @TName  +','
4[#S+D3E$m)z$o!K7J K我是网管论坛        --构造更新数据部分
4]+Z#R3v6|+|*c)E我是网管论坛        IF (@strWhere='')
4_'A+n7C*U/z:K3\bbs.54master.com            BEGIN
&I g,d"Y(D:h!x                  IF @Colstat=0 SET @strNewID='SET @'+@TName+'=(Select ISNULL(MAX('+@TName+'),0) From '+@TableName+')+1    --取新的ID'我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!"T0A0h!e!q!|6b4w
                  SET @strWhere=' WHERE '+@TName+'='+'@'+@TName
1d%X)l(Y+W4a            END
/[#\3Z,T(P0P;l6L'f(r,a我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        ELSE
0}5T*d8[2x/r!i5d.L我是网管论坛                  SET @strUpdate=@strUpdate+@TName+'='+'@'+@TName +','- 畅通网络 因为有我-^8q7i'O6C(M8K
        --构造删除数据部分 网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术&Y6l*p(i#k)O&T%M2F$V.T;O
        FETCH NEXT FROM Obj_Cursor INTO @TName,@TypeName,@TypeLength,@Colstat
/q1z)f8P)U3n8t#}'{我是网管论坛  END
(O1p#j&x/_%u我是网管论坛CLOSE Obj_Cursor
$R0[.|+q-k4[6F2w2]4g;D-M- 畅通网络 因为有我DEALLOCATE Obj_Cursor我是网管论坛-^:e p&~"W;x)c0n$E:X,y

%E'd4N)d,S5h+K;G- 畅通网络 因为有我SET @strParameter=LEFT(@strParameter,LEN(@strParameter)-1) --去掉最右边的逗号bbs.54master.com7]4| a%[3M#@(T;q7b
SET @strUpdate=LEFT(@strUpdate,LEN(@strUpdate)-1)
*V/f0c+V:K我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SET @strInsert=LEFT(@strInsert,LEN(@strInsert)-1) 我是网管论坛;w"i'G.{8l3Y3O"]/}7W5P
- 畅通网络 因为有我)P%N!v-q(g;X3{$Z
--存储过程名、参数
:e7g2s+F/@:u'H(\2?-s网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术PRINT @SQL_CreateProc+@strParameter +CHAR(13)+'AS'/N/a"j(M(f
--修改
2A#@!M,m1Y#L&c我是网管论坛PRINT 'IF (@INTUpdateID=0)'
,P'F'_9s3[8@2Zbbs.54master.comPRINT'  BEGIN'+CHAR(13)
&q9D+u+},|+t'Q:[)Lbbs.54master.comPRINT CHAR(9)+'UPDATE '+@TableName+' SET '+@strUpdate+CHAR(13)+CHAR(9)+@strWhere
"K;a#e4A&~-M网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术PRINT '  END'我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!,k)w.Z%` f*t"Y!o2`+[
--增加我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!5I%@#?"F1a
PRINT 'ELSE IF (@INTUpdateID=1)'
:[!l8j1v7z3d&^ `3Bbbs.54master.comPRINT '  BEGIN'
2}#y2|1o:i;Y*V-j我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!PRINT CHAR(9)+@strNewID
(i0]/d-^%u2k.l:p- 畅通网络 因为有我PRINT CHAR(9)+'INSERT INTO '+@TableName+'  ('+REPLACE(@strInsert,'@','') +')  VALUES  ( '+@strInsert +')'我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!/m6V1X:h(?-H*z%G1]8f;z-U
PRINT '  END'
5C.[:j7T5j3f'D0{我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!--删除我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!7B({ j-x.c"o)W7`$Y+^
PRINT 'ELSE'
L-b-m(H+{%c1~/A4z:@我是网管论坛PRINT ' BEGIN'bbs.54master.com,m0p)^,P)~4B'V;T/h ]
PRINT CHAR(9)+'DELETE FROM '+@TableName +@strWherebbs.54master.com/g6v;`;])Y$~9k"N#D
PRINT ' END'
8@-f5B;q/h"L$F- 畅通网络 因为有我PRINT 'GO'
*F t5_5M'E5l:B-c&X#I- 畅通网络 因为有我GO
'q!B1O)M8M!~+L3v我是网管论坛bbs.54master.com8|6M"B3E;i;I2B
[ 本帖最后由 DVD 于 2006-12-14 16:39 编辑 ] 作者: DVD    时间: 2006-12-14 16:40

绘画日历设计原因:记得那时,周末没事干随便想到的,只是为了学习。$@)k*u,\ p-g:?6~
设计方法:先构造一个月的日历图,再使用循环绘画1-12月的日历图。
8R6S#V6D){6}5{- 畅通网络 因为有我/*
4A#T+k$}4a,N:J网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术功能:绘画日历
!@+i#k4S'V8U!G6q+Q"Ubbs.54master.com设计:OK_008- 畅通网络 因为有我4f(E0E*[3^7|5U
时间:2006-05
1i2k9I(C5|8? `6R"k;^网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术*/我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!8C&s6n2u+U/w2I%O3S-]#B
DECLARE @Year nvarchar(4)我是网管论坛)k7d6].K)V4P
DECLARE @YearMonth nvarchar(7)    --月份我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!!E"v2?"B'G
DECLARE @strTop nvarchar(200)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术"H,s!J6X't:w%E2j6u
DECLARE @ForI INT,@ForYear INT ,@MaxDay INT
5i0@+Y7Z)K0p%o0m- 畅通网络 因为有我DECLARE @RowX INT --行位置 我是网管论坛6V"_;w#J f$J%i(o,G
DECLARE @strWeekDayList nvarchar(20)
*}%?3j4g7w m/kbbs.54master.comDECLARE @strPrint nvarchar(300)我是网管论坛4C5o5M)m*Q*r;q-Q,y

9^.C3A%_*f%I1~;\我是网管论坛-- ======================================
%D-l+x;s#O"R'y)o5P网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SET @Year='2006'      --请在这里输入年份
0P.m8T!h-x&[(z-@bbs.54master.com-- ======================================
9o"L&['[6Hbbs.54master.com--设置日历上边的标题格式我是网管论坛3|!n*V:U&S ]+p3`"b
SET @strTop= '日'+char(9)+'一'+char(9)+'二' +char(9)+'三'++char(9)+'四'++char(9)+'五'++char(9)+'六' +char(13)+网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术"\9K"R)Q:Z-B)E(A6M(x
              '───────────────────────────'3l9\!~6@6L&^6{+x
--设置星期列表
0R+Q!P"T6H _/?6P#L我是网管论坛SET @strWeekDayList='日一二三四五六'
,J.M p0L6F(g'~2b,u我是网管论坛SET @ForYear=1
)\7I'I2h&y3h我是网管论坛WHILE @ForYear<=12  --1月份至12月份
*U2Z:t:@/f9Z#j&G k- 畅通网络 因为有我BEGIN我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!8{3~3}2_'X#@,n)|
        --取当月格式
,P0s2Q,m7}&|'G6| c        SET @YearMonth=@Year + '-' +CAST( @ForYear AS nvarchar(2)) 
9{)S+[2~'I D- 畅通网络 因为有我        --取当月的最大日期
9g,V,i,k2Q9K:R6e2K:C网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        SET @MaxDay=DAY(DATEADD(Day,-1,DATEADD(Month,1,@YearMonth+'-01')))     
*S!j*U6X)["|%F.a.Q我是网管论坛        --找出1号的开始位置网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术0}'n6^6H2A(]4\#D
        SET @RowX=CHARINDEX(RIGHT(DATENAME(WeekDay,@YearMonth+'-01'),1),@strWeekDayList)-1
7W.?&k0S*O!F2N+a9F-T我是网管论坛        SET @strPrint=''
5q9k,r1`"~;`3J1E我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        SET @ForI=1
2G4D0K1x7n-a-x1{4Z @我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        WHILE @ForI<=@RowX  --构造1号的位置,并绘画空白处网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术(g7["|5E+P
          BEGIN
)t'M/d6a4_&i.U$E我是网管论坛                  SET @strPrint=@strPrint+CHAR(9)bbs.54master.com:m;L8V X5H2I
                  SET @ForI=@ForI+1- 畅通网络 因为有我9e0e(] Z,?
          END网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术6k"u0Y8V-v5T6^4K1^
        SET @ForI=1
!K$S2y5r+o9P)I5V#T1U"q我是网管论坛        WHILE @ForI<=@MaxDay        --构造2号到月底的位置,并绘画
*R3W*_+w1u"Y;v- 畅通网络 因为有我          BEGIN
n4Q1i3F.P"`;K)~- 畅通网络 因为有我                  SET @strPrint=@strPrint+CAST(@ForI AS nvarchar(2)) +Char(9) 
*\)X1{-t A'u$L网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                  SET @RowX=@RowX+1
0z;I/Q3k3~7~9K                  SET @ForI=@ForI+1
2i%a4\0z*\1X+v!Z#J我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!                  IF (@RowX%7=0) --满一个星期就换行
.b(M3^-D/U3H*I+j- 畅通网络 因为有我                      BEGIN我是网管论坛+Q5s0x%J9}$S:I3n8N7H4b
                            SET @RowX=0
.|$N*r#I7W,J*fbbs.54master.com                            SET @strPrint=@strPrint+CHAR(13)
$T1C4J;g E3g.]"Z$d2f我是网管论坛                  ENDbbs.54master.com4I&` H2n5X(h
            END
-A*u+j;q%C!B)a1K7Q%d我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        SET @ForYear=@ForYear+15j(y4V,P"L7G9a
        -- 打印输出一个月的结果
+O(W4?$R.H'R6r我是网管论坛        PRINT '━━━━━━━━━━━━━━━━━━━━━━━━━━━'
$f8m7?:`.H2Gbbs.54master.com        PRINT +Char(9)++Char(9)+'    '+@YearMonth+CHAR(10)
3@$t0c+W2U)?7W l1`#A- 畅通网络 因为有我        PRINT @strTop
H(M0M#J#e't)Q"w- 畅通网络 因为有我        PRINT @strPrint +CHAR(10)我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!2M"l5W2z$B;B*G!`
  END
:K%c'm.@-~"t0v+L!Q我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!执行结果:- 畅通网络 因为有我9_8Y&v2{(c6]1f%T

%k;s'L3}7n;P6T$h我是网管论坛
.S9D l7}1j+]
9o+A%p!e(a#H6i1U#S'_9_bbs.54master.com[ 本帖最后由 DVD 于 2006-12-14 16:48 编辑 ] 作者: DVD    时间: 2006-12-14 16:49

一个金额转化的问题设计原因:记得是有一客户的特别要求,开始有点晕,后来还是能做好。网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术#b%p!m#Z$H*F3~7D6_8w)h0d
/*
.P7`7K#h;Y3U*s9s-Q我是网管论坛功能:把Money类型转换成nvarchar类型,保留三位小数,而且把数值后面多余的0去掉。我是网管论坛#S#F,W:y(N-t+F!p.N5B9?'w
      如money类型的数值2.59100,转化成nvarchar(20)类型时,要求的结果是2.591- 畅通网络 因为有我5| U"{*E)? I5D7w#l$m'[
      如money类型的数值89.7800,转化成nvarchar(20)类型时,要求的结果是89.78我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!!f'O2T ?-V+@;f#H%q
设计:OK_008我是网管论坛9V+U9T$x/?:P4i/X
时间:2006-07我是网管论坛*l6E C.Y+W;e
*/- 畅通网络 因为有我9L0[.x"h)j
CREATE TABLE #Temp([ID] int ,F1 nvarchar(20),F2 nvarchar(20),SMoney  money,Dmoney money)$K,Z+q7I!H1b:l5x
INSERT INTO #Temp SELECT 1,'F1','F2',45.895,23.89000
0_%U'h$_'f6u#A8D我是网管论坛UNION SELECT 2,'F2','F3',45.895,234.67
&V!n)|#M8^:~0G我是网管论坛UNION SELECT 3,'F3','F4',25.835,32.123- 畅通网络 因为有我+[)E$w"x(Q
UNION SELECT 4,'F4','F5',13.7600,31.6754我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!"f:{1c-a A9j-R)@
UNION SELECT 5,'F5','F6',34.783,78.345
*c6?7}'X9h&z-e我是网管论坛/*
*q+h3a4l2b"O2b我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!要求的结果如下:
4F/A3v1\,x6Z5]1n*b网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SMoney +'X'+ Dmoney            我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!:m:}:Q+{-t!w
------------------------------------------------------
$@9X1z;H&h"t'^%R l-N7f;]我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!45.895X23.89bbs.54master.com4t3@,a/h,a.t+@'u
45.895X234.67
-Z$H9T6f"A2[%{我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!25.835X32.1232M;P$O8D/C+~7m
13.76X31.675#D-L4g&v;\*^ T
34.783X78.345- 畅通网络 因为有我)r Z*\#R-^&x-[;n9^
*/- 畅通网络 因为有我 \$G*I X8_
SELECT *,cast(SMoney as nvarchar(20)) FROM  #Temp:n7j)b#N8A'L%Z
/*我是网管论坛)p5b(`6k)M
        经过3次的数据才可以把money类型的数据后边多余的零给去掉,我是网管论坛&Q9n%K)M&T;Q8s
        money先转换成decimal,再转换成float,然后是nvarchar
#X&l2S7f P7}我是网管论坛*/bbs.54master.com9^'|8X/g5O$a#w"f ]
SELECT CAST(CAST(CAST(SmoneyAS decimal(20,3)) AS float) as nvarchar)+'X'+网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术:o2x%B#Z ~'@7Q
                  CAST(CAST(CAST(DmoneyAS decimal(20,3)) AS float)AS nvarchar)
7N6J6k2H1|- 畅通网络 因为有我FROM  #Temp
.X-w0r4W#@*M网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术DROP TABLE #Temp
5q4P7`!g.b L9?4C网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术8M;C5^(\+u-S9B*}#Y,i
作者: DVD    时间: 2006-12-14 16:50

多个变量赋值问题.设计原因:记得在itpub上有一朋友问到这个问题,感觉顶有意思的,顺便拿过来。'k"\/C;^*B)l5U
/*'q W7l d;F2u5];A
=================================
*y(_5p/V#^;u9q2gbbs.54master.com原来的问题是这样的:"^!]&F,j3l+I"?2G,b+D;{
=================================bbs.54master.com,z!q6}!]&{-`6b
现在的表结构是这样的我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!:R,Q#k)I"~%M*^'c,@
ID ReferID ReferCount$h2i)A-X!h#A3x'w:r'}9q
1 0 2
7X/l*{&y*[我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!2 1 NULL网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术 Z8n6H2O6B
3 2 NULL
9V*];s&@+a7?%f9F5a!F6W- 畅通网络 因为有我4 3 1- 畅通网络 因为有我)H.I-N"^(o#R/a7{(f;e
- 畅通网络 因为有我-{4x4R:r0v
然后声明四个变量
%A0T"Y7A-M+i/x#}8h我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!declare @t1 int 我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!;u;r"K;n+~!L)a.R
declare @t2 intbbs.54master.com4g*B-t;i'\2l C&B&P
declare @t3 int
-r6['E0Y#[5N- 畅通网络 因为有我declare @t4 int我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!#I5P%s-[5f,Y5U-u%x2]

;c-~/W7T8P*\-g2N9K然后使用四条记录中的ReferCount为值四个变量赋值
3K:o&X(s'Q!R+U网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术问题是能不能使用一条sql语句完成,用case行不行的我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛! _/e8j*n+^,Z#C,M J
请高手们指教我是网管论坛#W.^;B e#]2~7I#Q8j
*/bbs.54master.com/a(`:z w0M ^
--解决方法:
8t;j f(D x q我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!bbs.54master.com,\*`5A&d,~1Z!c!_
CREATE TABLE #Temp(ID int,ReferID int,ReferCount int)
(J:v*m'f)F'@7kINSERT INTO #Temp 我是网管论坛"h8F,Y%['X'C+Y
SELECT 1, 0, 2 UNION ALL我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!8|*i(n9{"M2z3O)V-j:c4\
SELECT 2, 1, NULL UNION ALL
.w-j"f8e*}我是网管论坛SELECT 3, 2, NULL UNION ALL
.\.u;Q:n!k:ISELECT 4, 3, 1
,H5F,E0p#e&Q0ZDECLARE @t1 int
4^+h-W5d8{)x't:_我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DECLARE @t2 int我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!(v.@'l!r/];P:O0L
DECLARE @t3 int网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术1G/@$F!n,@3H&Z3Q3F+H1F
DECLARE @t4 int网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术,}9Y!e5x+m8J6I#D#D/j
--根据ID的唯一性来查询
:G.p9H(L!|SELECT @t1=CASE ID WHEN 1 THEN ReferCount ELSE @t1 END
K1F(_$p$T.L.W- 畅通网络 因为有我                  ,@t2=CASE ID WHEN 2 THEN ReferCount ELSE @t2 END
7p U)};a2X3p我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!                  ,@t3=CASE ID WHEN 3 THEN ReferCount ELSE @t3 END
#k1W,T%t#Q*P/G网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                  ,@t4=CASE ID WHEN 4 THEN ReferCount ELSE @t4 END我是网管论坛8I"Y#w%g9?.])F
        FROM #Temp
&x.J&m%^0s%T%}+Y$x网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT @t1 AS '@t1',@t2 AS '@t2',@t3 AS '@t3',@t4 AS '@t4'
2e7]%f1?,r*F*O.^我是网管论坛DROP TABLE #Temp
1~(|9}#S"Z"g我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!/*
)O"D+E3x"E(y/P8F)X!X网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术运行结果:
1j9H8P0{!}2R@t1|@t2|@t3|@t4
#N1t$z&P H1?#R4o-O--------------------网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术+|,h/P&|)J8x(|
2  |NULL|1 |NULL我是网管论坛+W!t+~.A#Q7G:Z:{9H
*/ 作者: DVD    时间: 2006-12-14 16:52

计算在一段时间内某周几(如星期一)的所有日期设计方法:先提取第1个星期一,然后就是循环+7。难点就是怎么样提取第1个星期一。3R;J5t%o*S/|
/*
8C-?-N;f/S9h2@)dbbs.54master.com功能: 计算在某一段时间内某周几(如星期一)的所有日期我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!;r!R G8};q3E(g
设计:OK_008我是网管论坛7y'r0T2H0r1m6p:S*i
时间:2006-109t;M/i6z0k7s(P/j
*/我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!,?+@6j"R:B"o5v!B%Y
DECLARE @Date datetime
5y*Z(W*I0B1|1]我是网管论坛DECLARE @StartDate datetime- 畅通网络 因为有我 \;k a2Q%A'z9u1z9X)u-C;V,\.T
DECLARE @EndDate datetime
&^"]#i5^/P'B(v网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术DECLARE @WeekDay int网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术2g$s&s)?:b4T
DECLARE @i int
*N9U0w5q/b!v"K1u3v我是网管论坛bbs.54master.com&L6]!t7d;{9F9P;y
SET DATEFIRST 7                      --设置每周的第一天
9D#^$Y-]6xSET @StartDate='2006-01-01'      --统计的开始日期
'Y n;P9h8Y)^7w/u8O网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SET @EndDate='2006-12-31'        --统计的结束日期我是网管论坛3x#@4P"J0c-S6B/_(J.L
SET @WeekDay=2                        --根据实际的@@DATEFIRST而定,一般默认是7,如 @StartDate='2006-01-01'时候, @WeekDay=3表示星期二
'K&`1]!r&y.a我是网管论坛SET @i=DATEPART(weekday,@StartDate)我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!&T#H(O5}(c5_*t
PRINT '每周的第1天设置@@DATEFIRST:        '+CAST(@@DATEFIRST AS nvarchar(1))
,_!c$R,Z%g!d"@/mbbs.54master.comPRINT '开始日期对应一周的第几天:            '+CAST(@i AS nvarchar(1))
4H4j.J/}/p5N(U,X2NIF(@i<=@WeekDay AND @i<7)- 畅通网络 因为有我/w:o)f'o9I;l:F.Z
        SET @i=@WeekDay-@i     
+s D%T)X4V#Rbbs.54master.comELSE IF(@i<=@WeekDay AND @i=7)
,l5P9w3^+z5z)Q0|2m- 畅通网络 因为有我        SET @i=@i-@WeekDay
4H/T8q5[7_2S6\-~*k- 畅通网络 因为有我ELSE
9p-K)]/?'?,j(H$G我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!        SET @i=@@DATEFIRST-@i+@WeekDay网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术-_.E)i;j;^-z&d%v
9I)E9i&I%W
SET @Date=DATEADD(day,@i,@StartDate)
2q-H3X6Q9T)L5h)g5l我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!WHILE @Date<=@EndDate 网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术9x1B!C:N']9Q$l
        BEGIN网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术(|)t7b:f.n2m.l.o1Y1r
                  IF(@StartDate<=@Date) PRINT CONVERT(nvarchar(10),@Date,121);t&T:b'_)s+Z0I/P$N
                  SET @Date=DATEADD(Week,1,@Date)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术:|(\/m9i.]
        END我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!6~3r3f$X#~/J3m'E/Y#u/g,G
GO网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术0c(v:f(G3s&E:{*F0J ?%G
bbs.54master.com H1e7b+g$N&s-m
/*  ==============运行结果================*/- 畅通网络 因为有我+G5B1p-U*}'h'd/p;\0T'q6E
/*
s;L/L&['K0r(v*C:}我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!每周的第1天设置@@DATEFIRST:    7
$o)E6G(M%S5C开始日期对应一周的第几天:                1
2A-t B!K8w1V,c6m网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术2006-01-02
7X,r p,c-c'Q*R我是网管论坛2006-01-09
"\&w _*},H;H%u*^网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术... ...
6X9P(u1n0X!@.y2006-12-18我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!*E4x.Y9g0M;H4G*u
2006-12-259i"C3i5F*t
*/ 作者: DVD    时间: 2006-12-14 16:52

字符串的分割/*
2x.o G5o'|-B功能:实现字符串的分割,达到批量提交数据参数和分批处理功能。我是网管论坛9`#_(@(h/r#F9[%{5`
设计:wghbbs.54master.com6J7}$h/_:D-c
时间:2006-09
%r&v4{(r1K:K:J!O+R e- 畅通网络 因为有我*/
2R:p9j!n:x- 畅通网络 因为有我declare @str1 nvarchar(100) --要分割的字符串我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!5g:Y9z9i)l3z,L!X/Z
declare @str2 nvarchar(100) --分割得的子字符串
2?*V"n9X5C4L;E*gbbs.54master.comdeclare @split nvarchar(40) --分割字符or字符串6?$a*u#U,X/E7s3@1y
declare @patIndex int      --分割字符or字符串第一次出现的起始位置bbs.54master.com+p5D$~,K2W
set @split='★■->'
"\$?"A0w"Q我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!set @str1='334,345,''dfd'',★■->select * from Employee★■->45654DFG★■->452897★■->97887657★■->123445'
0B)o {;G M9Cset @str2=''
!?!a7k#@)|'v;T2H5@8s--从左至右分割
/h;u(v"v)L+z9W)@我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!while  @str1<>@str2  *Z/K*M3U/L
begin
6o4v4R0^ r;{- 畅通网络 因为有我  set @patIndex=patindex('%'+@split+'%',@str1) --patindex函数返回@str1中@split第一次出现的起始位置
4C'Z1|0N/f%~- 畅通网络 因为有我  if @patIndex>0
#b;^6Q-k4C1j"y"O#K!q- 畅通网络 因为有我    set @str2=left(@str1,@patIndex-1) --截取@str1中以@split为分割的左边的字符串
6s'^#d0b/`#g*y#G6?  else
"T'f-~&O$f/k)S7W我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!    set @str2=@str1+L)d8l9X3b-`
  print @str2    --调试我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!;v4T6N1X0{$O
/*- 畅通网络 因为有我#e7j7{+~/}!b&X.@
  执行过程 ....
7[+z6U!H:O9}"e"G"{- 畅通网络 因为有我*/
4G"L9Z6R*{+Z!v'D-O8P-R- 畅通网络 因为有我  if @patIndex>0  set @str1=right(@str1,len(@str1)-len(@str2)-len(@split)) --截断字符串,为的是下一次循环能取得,@str1中@split第一次出现的起始位置网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术.S#c.o#E#S$V.p1[
end我是网管论坛(J:W,o(n*u$x;s"S!y5H
*C'T:P;s1y6[
作者: DVD    时间: 2006-12-14 16:54

查找某一数据库没有主鍵的所有用户表
9^.g.P&z5l2P-y网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术/*,`7r4W-x2v
功能:查找所有(某一)数据库没有主鍵的所有用户表
,U2i5y+r#[!_9v-|bbs.54master.com设计:wgh网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术"D0]+n8M)J;c
时间:2006-06
1e;i.u-n/p4{$X0ybbs.54master.com*/
:i+X4e-p%W,kbbs.54master.com
4|7C)L$G2H1y5sbbs.54master.com/*;K.x/y!Q0q)T1[.I:^7n
设计方法:使用游标的方法,从系统表sysobjects、syscolumns、sysindexes提取表的相关信息。
9d$]7Q*]1z6d我是网管论坛*/
$V!u7S'l4~!?/v;A5qbbs.54master.comDECLARE @DatabaseName nvarchar(20)
+@#g-O(U-S)M:z9@我是网管论坛DECLARE @Execute_Sql nvarchar(4000)
8\/G1~9C,a1q0C.M5N0^我是网管论坛SET @DatabaseName='ydhr' --要是要检查所有数据库就SET @DatabaseName=''3~(`:S-?:d4z:T;O.y
CREATE table #Temp(DatabaseName nvarchar(20),TableName nvarchar(50))
;k+D&f3_!s+a5\:S我是网管论坛IF ISNULL(@DatabaseName,'')=''我是网管论坛:J8@3N V)c h%I
        DECLARE cursor_Sql CURSOR FOR
+K8Q7M/a9W3q3}%C)N+Y网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        SELECT name FROM master..sysdatabases WHERE dbid>=7  --dbid>=7 都是属于用户建立的数据库- 畅通网络 因为有我.P l4I3@:e8K-z#S#z
ELSE我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!!W8J1C+l7d;P
        DECLARE cursor_Sql CURSOR FOR我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!'u&W.Z2P-e%_4o;\*A7Z
        SELECT name FROM master..sysdatabases WHERE dbid>=7 AND name=@DatabaseName- 畅通网络 因为有我3|+s/I3K#g8P
OPEN cursor_Sqlbbs.54master.com;v1v#u/s3m4k @
FETCH NEXT FROM cursor_Sql INTO @DatabaseName
,q*J0N+m5c我是网管论坛WHILE @@FETCH_STATUS=0
*v;[.}7E$m0B7d        BEGINbbs.54master.com4}+R7s8N.~5A.g9P
                  SET @Execute_Sql='INSERT INTO #Temp bbs.54master.com3g2r+j-s$x5B
                            SELECT '''+@DatabaseName+''',A.name FROM '+@DatabaseName+'..sysobjects AS A WHERE OBJECTPROPERTY(A.id, N''IsUserTable'') = 1 AND NOT EXISTS(1?0e'L.a3e(|
                                    SELECT 1 FROM '+@DatabaseName+'..sysindexes AS i INNER JOIN '+@DatabaseName+'..sysindexkeys k
3T4e1U$]1q;p%q%I我是网管论坛                                    ON i.id = k.id AND i.indid = k.indid INNER JOIN '+@DatabaseName+'..sysobjects AS o
+R.z5C+a0j+~'~5?网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                                    ON i.id = o.id INNER JOIN '+@DatabaseName+'..syscolumns c on i.id=c.id and k.colid = c.colid
2V(z1i&p/w-\'Q网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                                    WHERE o.xtype = ''U'' AND A.id=i.id我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!3W'T,h5{(H o8H
                                              AND EXISTS(SELECT 1 FROM '+@DatabaseName+'..sysobjects WHERE xtype = ''PK'' AND name = i.name)我是网管论坛9H*f%I;t*i#U
                            )'
5S.N4E$D0F&X.h-`5f%`:W-Y                  /*6H!x"?8q1|1_$f$z3`8I
                  OBJECTPROPERTY()返回当前数据库中对象的有关信息,OBJECTPROPERTY(对象id, N''IsUserTable'') 表示是否为用户表bbs.54master.com.[6r8l;x7E1H7q5M
                  xtype='U' 在系统表sysobjects中表示查询的对象属于用户表,与OBJECTPROPERTY(对象id, N''IsUserTable'')功能一致,只是用法格式不同bbs.54master.com1g!} f3@&C E0D6l
                  xtype='PK' PRIMARY KEY 约束(类型是 K)
/m/Y.n%p!r#Z4v0w我是网管论坛                  */
%G1r"b&|+t7W网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术                  EXECUTE(@Execute_Sql)
.C2i/M*Y+a)t2w2c                  PRINT @Execute_Sql  --为了能更清楚语句的含义,我这里可以使用PRINT查看整条执行语句
(y7c3y9t*U$J#K                  FETCH NEXT FROM cursor_Sql INTO @DatabaseName
6V7h8N9v9b网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        END
&d!]'i+y)~&l8L4h5c!lCLOSE cursor_Sql
'V5y8Z2g1A8{.p-T)Z5hbbs.54master.comDEALLOCATE cursor_Sql网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术!_1s;m4h4O.O
SELECT * FROM #Temp
*J5{+['_5x5@(j!c-S我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DROP TABLE #Temp
0@!H,O'M;]7L,@(I+_5O
7q1J5{$p%C&z我是网管论坛 作者: DVD    时间: 2006-12-14 16:55

重命名数据库、表、列重命名数据库、表、列名,使用系统存储过程sp_rename是最简单的了。- 畅通网络 因为有我7F/`'M5K2J5Z7O,v
我们先来看看帮助文档的说明:
,N9^5s$P"|7R网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术sp_rename
.O)[2G5o"?"n$X L更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!)u4q v)n0@.\4J%J4\%r-O
语法"@)v"j!A6S&\0y2i3_/Z;a(R t
sp_rename [ @objname = ] 'object_name' ,
"r"y5T5H:w |8@8^.w我是网管论坛    [ @newname = ] 'new_name'- 畅通网络 因为有我+b$V2C6V5n#K!x"r8\
    [ , [ @objtype = ] 'object_type' ]网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术&N'l1X&m,Z6F0Z2L8y%r7@5z6V

3G6P4r#J0O {'_@objname 对象名bbs.54master.com9A6{(K-M8e)j!R
@objtype  对象类型
8w1i)P(b(P,I1s,A 值描述COLUMN
,M*X+S&Y.J.T-F&e*i#r5W!S- 畅通网络 因为有我要重命名的列。我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!4f/~#d"r&m%S,i&g*r
DATABASE
0K)Z;|+p'C3O'c9b6@5].E网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术用户定义的数据库。要重命名数据库时需用此选项。我是网管论坛+S"y#[+y5X+U4i;g,y;e0q!]
INDEX
H4~0s4u$^;F- 畅通网络 因为有我用户定义的索引。
3d)u*E#k*X3e8\$b f- 畅通网络 因为有我OBJECT5P1x%O"N,y4C&J4}8C;\7a
在 sysobjects 中跟踪的类型的项目。例如,OBJECT 可用来重命名约束(CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、用户表、视图、存储过程、触发器和规则等对象。
2x3t ^/E,gUSERDATATYPEbbs.54master.com$]6r(Y3C.c'K)X7]0R
通过执行 sp_addtype 而添加的用户定义数据类型。网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术/j"E+e1D*D%e1H!j6h8J
bbs.54master.com!a%T-h:s c(z#`5`/F4{
/*bbs.54master.com&o2X4@*]%i7o/J(},r
功能:重命名数据库、表、列
8_'X:k-`)?网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术编写:wgh网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术(J)|9|)W!w(e!f4E4_
时间:2006-11
6o"](R-K!l3p m/f2ibbs.54master.com*/- 畅通网络 因为有我&j5U3[#[5T

;{&B"\)Q0n P3d网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术--重新命名数据库
+i(d0j'V1m:g4S"_bbs.54master.comIF EXISTS(SELECT 1 FROM master..sysdatabases WHERE name='BBS')
&R/d/g'~-w!a我是网管论坛        EXECUTE sp_rename @objname='BBS',@newname='BBS1',@objtype='DATABASE'网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术"e+d1E1^-w6v8T:b7z
bbs.54master.com$i8z7b,s.Z1|
--重新命名表名-Y-n'N&@*_ a,T0`&B,p
IF EXISTS(SELECT 1 FROM sysobjects WHERE name='bbs_log' AND OBJECTPROPERTY(id,'IsUserTable')=1)        - 畅通网络 因为有我"Z8Z(l(j/|+{(b8J#o
        EXECUTE sp_rename @objname='bbs_log',@newname='bbs_log1',@objtype='OBJECT'
"I5j-J5}'q0U(W
"H7{-O%t"Q/C我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!--重新命名列名
1|2m"A!Y&u7X+\&S(u我是网管论坛IF EXISTS(SELECT 1 FROM syscolumns WHERE id=OBJECT_ID('bbs_log') AND name='ColumnName' AND OBJECTPROPERTY(id,'IsUserTable')=1)     
5A/_/q&c1j+n.d/Q,F%K+q网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术        EXECUTE sp_rename @objname='bbs_log.[ColumnName]',@newname='NewColumnName',@objtype='COLUMN' 作者: DVD    时间: 2006-12-14 16:56

格式化字符串 ,如输入01 自动生成 0000001/*===================================================
9q9Q:a5m.z&E-k)l2y3L3Jbbs.54master.com  功能:格式化字符串 ,如输入01 自动生成 0000001 我是网管论坛&V:u2n5o.P-I;h&x
  备注:当位数达到10以上,要另写算法,否则出错我是网管论坛%H2a&U+N:]8U
  设计:weiguohao
$p%|$W v"^-~5U  日期:2006-03-11
2W(c6@1h-A网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术  ===================================================*/
*L2`0g9l ^CREATE FUNCTION FORMAT_STR我是网管论坛;l8R.I9S0f)i
(@strX Nvarchar(20),@FormatLength INT)- 畅通网络 因为有我%s0o8z2p I#V
RETURNS NVARCHAR(20) AS 
.^3{;v:K#u7G5|#U.w我是网管论坛BEGIN bbs.54master.com.O4X#^,d7O8u.c4G
DECLARE @Return NVARCHAR(20)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术 f8`&v'Z9?5P%P
DECLARE @Length INT
:]#v3u#c1C#N V网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术    SET @Length=LEN(@strX)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术+O8I.k7z'J;R
    IF @Length>=@FormatLength- 畅通网络 因为有我&_4s!N"z p0]&t5z
        SET @Return=@strX
7}+\1g-g-n b&h"d我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!    ELSE
1`-u4B$| d3?!H0y- 畅通网络 因为有我        BEGIN- 畅通网络 因为有我0b.}*v%g7a(n
        -- 格式化,只要是调用到数学函数POWER,其他就不再说明,太简单了我是网管论坛$E%c/K"a1M)n.Y(O-j'y
        SET @Return=CAST(RIGHT(POWER(10,@FormatLength),@FormatLength-@Length) AS NVARCHAR(20))+@strX我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!/j-}$j3u)H3N'G V*D&C;l*~
        END
.i8?!c5s+a,n#C&t Q/Q6K1D+A我是网管论坛RETURN @Return
,P#I.` [4c1S1lEND 作者: DVD    时间: 2006-12-14 16:57

一个厂家与销售商的查询问题问题来来自itpub论坛上的一位朋友,如下:
,E:i#T;F,b- 畅通网络 因为有我多个厂家多个销售商每个厂家对任一销售商都免费前10次的货款有厂家表,销售表,销售商表想求得销售商三个表拼合一起的视图视图中有个字段标出免费的销售记录?$n5c L3F)l!g*k4e
厂家表:ID ,名称销售表:ID,销售单号网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术/^'k&l2`"R/E
厂家:ID,销售商ID
*h)k)s1o.r#B我是网管论坛销售商:ID,销售商名称预得视图:销售单ID,厂家ID,销售商ID,是否免费谢谢哥哥姐姐了。帮忙写写…… *S*c%@3x+g I4C
解答:网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术-s,^-C5y-}3Y
CREATE TABLE #Suppliers(SupplierID int,CompanyName nvarchar(40)) --厂家表
*N9b.y(t4a%U9MCREATE TABLE #Sell(SellID int,SupplierID int,CustomerID int) --销售表-Y#B${#y+h(Q9i9m6u
CREATE TABLE #Customers(CustomerID int,CompanyName nvarchar(40)) --销售商、客户表
/I9i8L;G%I0C2u&M6K我是网管论坛INSERT INTO #Suppliersbbs.54master.com!x!l:p h+\)S;j6i-G6t(b
SELECT 1,N'Supplier1' UNION ALL
3T%h%F+r%[(v4S3H+y+{网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT 2,N'Supplier2'
%B;m"q3_)z)Q&gINSERT INTO #Customers
-^9k:F0U)?.r我是网管论坛SELECT 1,N'Customer1' UNION ALL
3~(w'g.?-G4Fbbs.54master.comSELECT 2,N'Customer2'
)u5T;R'}%p'RINSERT INTO #Sell
"O&n6x9c:m;|(~网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT 1,1,1 UNION ALL Y2I*c i8g;i
SELECT 2,1,1 UNION ALL
4W2K8Z9q(KSELECT 3,1,1 UNION ALL网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术6M(e3B-w7^"M4O3]
SELECT 4,1,1 UNION ALL
%e!O:{;E&Y2z*w我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SELECT 5,1,1 UNION ALL我是网管论坛!R&a&~.s3o:_7O-O%X
SELECT 6,1,1 UNION ALLbbs.54master.com(J0L+O#M"h(H1e
SELECT 7,1,1 UNION ALL我是网管论坛;\"X/G"V$b%r2`;^
SELECT 8,1,2 UNION ALL
0d*x(s0}9c!Y4`%O0K&w- 畅通网络 因为有我SELECT 9,1,2 UNION ALL
)Z&b1X5p,L4d- 畅通网络 因为有我SELECT 10,1,2 UNION ALL
2b6T4b#h&q我是网管论坛SELECT 11,1,2 UNION ALLbbs.54master.com5|:G%g1`+n"y
SELECT 12,1,2 UNION ALL
,m5X3W+\3h9p6E!v9zSELECT 13,1,2 UNION ALL
4|9E(l A*C'H)u,D网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT 14,1,2 UNION ALL
/W/S2`.b1T#],}网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT 15,2,1 UNION ALL我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!!V"J8j @"G;r)?.V$Y
SELECT 16,2,1 UNION ALL;`(Z0i&W%a.n
SELECT 17,2,2 UNION ALL
)o6w6k.B6B-h5t;T我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SELECT 18,2,2 UNION ALL
8`8]0F*g3j6oSELECT 18,2,2
'S;g3^6C!J1A#w0Y5h.y网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术--每个厂家对任一销售商都免费前3次的货款(根据实际修改提前多少次是免费的货款)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术(?+x-d!G.J)S%g+`8x
--主要是使用到一个GROUP BY ...HAVING ...在对数据进行分组和聚合后,就会用到 HAVING 子句中的条件
.z2Y)S5a.Q"K*L,o0U(Q1}SELECT A.*,(CASE WHEN EXISTS(SELECT 1 FROM #Sell AS B WHERE A.SupplierID=B.SupplierID AND A.CustomerID=B.CustomerID AND B.SellID<=A.SellID GROUP BY B.CustomerID HAVING COUNT(1)<=3 ) THEN '是' ELSE '否' END) AS '是否免费' FROM #Sell AS A网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术!\9{#{1\'L(E'z
DROP TABLE #Suppliers,#Sell,#Customers/V:e,O!h9E'~ q6x3I*l
:?5M:z8_,n!L!w9L
结果
0O4G5a1n.w&T,Z我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!
1q!L*S&j3Y*w0a%c%O;o-j我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛![ 本帖最后由 DVD 于 2006-12-14 17:01 编辑 ] 作者: 绿竹居    时间: 2006-12-14 16:59

俺的天。好多。俺要好好学习。。谢谢DVD  作者: DVD    时间: 2006-12-14 17:01

不用游标就可以实现的一个问题原来问题如下:bbs.54master.com(p*P&E+@.h2f
如果有2个表T1(aid,bid),T2(bid,bname,bprice)
8K&U)_0\;E4A2v'K- 畅通网络 因为有我T1的字段表示顾客ID和商品ID,一个顾客可以买多种商品现在T1有记录:
7`1n m1A ['K'Ubbs.54master.com1,10网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术.K"R9?+W*y#z.P1y;@/H
1,11网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术8O4S1?2B&d#p&Q9^
1,12我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!"}8S;R!z"R2Y(e7d
2,10我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!:R-y1s"B&H+I8w2o
2,13
*\9A)c:O9A.f"A3Z3Mbbs.54master.comT2的字段表示商品ID,商品名称,商品价格现在T2有记录:
,j)^*`+?:\;f R我是网管论坛10,aaa,1
0I"f-H6p9L:l7L-M1M-h%n;tbbs.54master.com11,bbb,2我是网管论坛/W&F4N9B V6]!m
12,ccc,3网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术*b'y2O-R/x.t4C
13,ddd,4
1G'^#E8e!U我是网管论坛现在要实现显示顾客买的商品名称和价钱即字段:bbs.54master.com&a#P'\"u$U1[3M/i
aid,bname,bprice我是网管论坛2@6E+U,t"~5K4f7H
但是同一个顾客只保留一个ID,其他为null请问怎么实现?即将上面的记录实现为:- 畅通网络 因为有我;N-x.m%P5w,_1H"?
1,aaa,1- 畅通网络 因为有我7v.Y,m"?,X2I7F,V
,bbb,2我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!*F9k*z2_;?;\%k2J6]*I3_
,ccc,3
&l,o4b8f-W8M- 畅通网络 因为有我2,aaa,1
1|#g9f#E*])Z#h6i.L8u网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术,ddd,4,w9F,B f/N/A'l0\
网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术#f,a"u&~)k#p"T
如果不用游标有办法实现吗?网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术 Z9O4P,~)P*l
解决方法:
1D't/t6d/R*b$Q:QCREATE TABLE #T1(aid int ,bid int)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术:T*R D9V0j7k$h:G-P5_8h
INSERT INTO #T1我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!3y&q(o3S'\/X-})t*x)i
SELECT 1,10 UNION ALL
$l-P9h+S/d-M#F"m$]&eSELECT 1,11 UNION ALL2O2\1t2i8~5U/R5T
SELECT 1,12 UNION ALL
6J+Y*j4j;|:\&i2j0g- 畅通网络 因为有我SELECT 2,10 UNION ALL网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术1n4]/k4q%I)i)z
SELECT 2,136E Q2f3M N8H%U
CREATE TABLE #T2(bid int,bname nvarchar(10),bprice int)
:`0K7@"G/f*A&C:C5t网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术INSERT INTO #T2我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!6J*}4`:k;c0j
SELECT 10,'aaa',1 UNION ALL
0L-u o5W8Z5r#}4t3v网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SELECT 11,'bbb',2 UNION ALL我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!)o z"K!J%Y2z!n
SELECT 12,'ccc',3 UNION ALL
6^&j3i9k(p P;Y我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SELECT 13,'ddd',4我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!.W1Q2U#Z3N1p,O)}
SELECT A.aid,B.bname,B.bprice INTO #T3 FROM #T1 AS A LEFT OUTER JOIN #T2 AS B ON A.bid=B.bid
-Y)V-R"L0{$\.y-M-Q- 畅通网络 因为有我DECLARE @aid int ,@lastaid int- 畅通网络 因为有我"E#R6^4Y$A1L4f9~
UPDATE #T3 SET @aid=(CASE WHEN ISNULL(@lastaid,'') =aid THEN NULL ELSE aid END),aid=@aid,@lastaid=aidbbs.54master.com9H$d)C:m+T!q0k
SELECT * FROM #T3${9p*G#C's%g%I(U3]
DROP TABLE #T1,#T2,#T3
8|7Z*a,L:{4G,X"`7c- 畅通网络 因为有我结果:/?%A"p+v4i:S,h&@
/*
/}3J2{$f%M2t(D我是网管论坛1 aaa 1
%X4\%j!d9L!^#R'S'Z(n)~bbs.54master.comNULL bbb 2bbs.54master.com)A$q9t5G7P2M(p-y&g$|1J
NULL ccc 3我是网管论坛"^$L(g&H$v O-B
2 aaa 1-J+e)h1`+Y#C7G
NULL ddd 4- 畅通网络 因为有我)\1]%o6c0b,h2k8~,N
*/ 作者: DVD    时间: 2006-12-14 17:02

一个数据替换问题
!T-v"n t(~)z原来的问题:我是网管论坛)W2q#N8I-{!i4}/H
我要將([4000]+[3900])/([3100]+[3200]+[3900])*[3900]替换成我是网管论坛'Y C1G5I%Y"E8d
(0+0)/(0+0+0)*0网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术6?2N)x"J,h1f#I%v!a
就是把[4000]樣的替換成0
'i%d%j6R;w0\#y网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术解决方法如下,
5T*b5B,L%c%Y!n,l-p.J- 畅通网络 因为有我建立一个自定义函数:我是网管论坛,B1u#^(H%H9m
CREATE FUNCTION CreateMathExpression
\;b%j%{2}*y- 畅通网络 因为有我(@ColumnName nvarchar(500))
+V,K1y5x+R#a3H7Ubbs.54master.comRETURNS nvarchar(1000) AS bbs.54master.com4J)g1Q*S7Z(~+b0H#j0F
BEGIN
/U;h*r5]*x&W$\我是网管论坛DECLARE @FieldValue nvarchar(20)我是网管论坛.k,u,s&`5p3f5a!j
DECLARE @Return nvarchar(1000)网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术+u'e9~/O/c5N3o8[-{ T m#v
DECLARE @Sql nvarchar(1000)7Z4M:e;O H
DECLARE @Index int
*n+_3g/j$\8e+n"j我是网管论坛DECLARE @End bit
)e+C%`%O9I7i9D"_"U我是网管论坛SET @End=0我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛! M!X3I;a+U b-G'k
SET @Return=''0t4Y0d/|3M)p.J$R%x
--SET @ColumnName='[3900]/222.8*([3200]/[3900])'
8w0h(s6]1i我是网管论坛SET @Index=CHARINDEX('[',@ColumnName)我是网管论坛&B/T S6s/^4L%Q%O#|
WHILE @Index<>0- 畅通网络 因为有我2y!s/c&Z(g3g
BEGIN
:D&W9C!U7?9i$?4F- 畅通网络 因为有我IF @End=0- 畅通网络 因为有我3d%\$y2g)C)f/w.m
BEGIN
9p5W+w,h'\$DSET @Index=CHARINDEX('[',@ColumnName)我是网管论坛.g)U(Y+|3s8]:H6@$L&b
IF @Index=0 GOTO Exit_While
9T,F5V%F8Y+F我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SET @Return=@Return+LEFT(@ColumnName,@Index-1)- 畅通网络 因为有我#z&F*U$~$|-a q
SET @End=1
a,q!B%?,]#~- 畅通网络 因为有我END我是网管论坛)O:n;T-P"O2h
ELSE我是网管论坛*a)a2a:X;u0c7R
BEGIN
-T3m0C'P8o4f;M'~我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SET @Index=CHARINDEX(']',@ColumnName)我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!(| }"y%h4l,K,i
SET @FieldValue=LEFT(@ColumnName,@Index-1)- 畅通网络 因为有我%z&e,K2E'I4M)a"y-p
网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术1K+t"^+m0g)p/k2D
SET @Return=@Return+ '0'&P,H/e5T2Y6~)N8N9O:h0g
SET @End=0我是网管论坛%I*@;p2F5E4a0g
END
k.p7t;s+w Y我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!SET @ColumnName=RIGHT(@ColumnName,len(@ColumnName)-@Index)我是网管论坛2W&F)a"N Q&p
END
(E"Y.V2f:i8e:m(L;D!Ubbs.54master.comExit_While:我是网管论坛%a*V(T0{!x(q'I;u"[
SET @Return=@Return+@ColumnName9\'Z5]2l'Z/B'T1L
RETURN @Return
3`$K)f$N'I#M5y7@- 畅通网络 因为有我END
;i8Q2A8g$[-?4X$y9H%Qbbs.54master.com--------------------------------------------------------------------例子:DECLARE @N nvarchar(200)我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!6f;O4m9T)c6r M/h
SET @N='([4000]+[3900])/([3100]+[3200]+[3900])*[3900]'网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术9c$Q7G7c8@1u;^;\%?8U
SELECT @N我是网管论坛+l!K8V$C$t.O;M,s0x
SELECT dbo.CreateMathExpression(@N)
9c$?9Y"|4u6l!b-------------------------结果:
%t,S$_.T:w(M我是网管论坛(0+0)/(0+0+0)*0
(M)R#o:U2F9Y9[6H/cbbs.54master.com备注:函数中的一些代码是别的用途,可以忽略。 作者: DVD    时间: 2006-12-14 17:04

向表中一列插入1-100的连续数 我是网管论坛;Y2f%H;}2i4e,G"N ~ S
在BBS上看到一朋友问到这样的一个问题:
(x:Q.I1T e8I5b6`1t:~网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术求助:向表中一列插入1-100的连续数我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!3`5S:I+c'k;~9\*C
bbs.54master.com2]/p-z3P4b,l
table A 中有BH字段(INT),怎么连续给BH赋值1-100,象下面的一样bbs.54master.com*G/f!Z*H9t+l0n9O
)X8M;s'o3S6F
BH
3w,w7V)G8qbbs.54master.com------------------------------------------------
+n4P-G:O abbs.54master.com1
;z:]4f:F+H(I我是网管论坛2
'?9\ f7J1G4R#i'h8?3a ]我是网管论坛.
9t:O/@3U0M y我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!.我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!"a9Q#t(R%F9\-W)C
.
;O,`;A)z5{$C我是网管论坛100
$j"[)k6S:c#N'w7S5lbbs.54master.com根据常规的方法,我们会想到使用While来实现以上的功能。如,一朋友所写的这样:#e7k9[ C9K:F(^'A&b%l7P
CREATE TABLE TestTable(BH INT)3i c0c5Y2w
GO网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术9E.\+|8t:m-n
SET NOCOUNT ON
;d&n*K7T.n1F&y m,z!kbbs.54master.com/*
2n:u)q*\!\;Q1J4v#E4e- 畅通网络 因为有我SET NOCOUNT { ON | OFF } 当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数
9r(p&K,M3W6o3t我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!*/bbs.54master.com6x.S*p*s(u2P
GO我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!6@8]2G7l(\ c*g1B8g.G0O
DECLARE @MyCounter INTbbs.54master.com+{0z6l.d.x%N#@6k-V2|
SET @MyCounter = 1bbs.54master.com-Y%e7N5l*q8y
WHILE (@MyCounter < 101)
8m*J'V'@$E&q0BBEGIN"T/e:F2|)g,K Q$g
INSERT INTO TestTable VALUES
"F%t1j)^)Ebbs.54master.com*g4a5C1` r5P8[)g;^
(@MyCounter
:r0o*C ?8R5v A- 畅通网络 因为有我)我是网管论坛-t)u6I+U$X
5g$i5o(E(d7{/d
SET @MyCounter = @MyCounter + 1- 畅通网络 因为有我1_"N-P"A!D%z,?0B
END
:O"S+j0z5~我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!GO
2Q#j.i'c2e5U.U'm$b5w网管论坛,网管软件,企业网管论坛,企业网管软件,企业网管教程,网吧网管论坛,网吧网管软件,网吧网管技术SET NOCOUNT OFF
%r.j"?-J3o9E$}.S*X3@1T:}GObbs.54master.com7p'u)H.\&?;?+m
select * from TestTable
+_+E8];V/e8B&N1A"v--drop table TestTable1T N1j8e1y3d'P1J4s
我看一下,突然想到一个使用变量的方法来实现,如下:
(a-n3_;W5u*P我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!DECLARE @i intbbs.54master.com#U.F2Y%U4Y4p
CREATE TABLE #Temp ([id] int, C1 nvarchar(20),BH int)
8U6i1t$n4a7g-_9w- 畅通网络 因为有我SET @i=400
5k*N+e-g0o:y-L2A我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!WHILE @i<=500
)M:i-]'N7H:J7Y'cbbs.54master.comBEGIN
)}9|/l+j5^0|0f3O({我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!INSERT INTO #Temp SELECT @i,CAST(@i+rand() as nvarchar(20)),null
7h7p-L X;v)x${8}"R我是网管论坛SET @i=@i+1
#t7D*q#O#]1O#p%G-Abbs.54master.comEND
.y!E%J'Z'`(R;@6[4c$F0?bbs.54master.comSELECT * FROM #Temp+w*f:G'}9v8T"x
--更新字段BH,更新行数为前100行我是网管论坛,企业网管的天堂,网吧网管的乐园。网管软件下载、网管教程下载。中国最大的网管交流论坛!&~9f-Q7W!B(x4l-b/K,@'K+N
SET @i=0 - 畅通网络 因为有我2M#_"^-|9w&n5A)l
--@i相当于For循环中的i,每更新一条记录设置加@i=@i+11i4k/\'F#R0\
UPDATE #Temp SET @i=@i+1 ,BH=@i WHERE [id] IN(SELECT TOP 100 [id] FROM #Temp)我是网管论坛 }3N,?9V3q$G
SELECT * FROM #Temp)_(d w7]&K,a#\
DROP TABLE #Temp