friendfox

1.
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = \'SP_test\' AND type = \'P\')
   DROP PROCEDURE SP_test
GO
--存储过程:SP_test
--功    能:关联 表zhb和相关数据表
--     动态构造zhb与数据表之间的关联
CREATE PROCEDURE sp_get_zhb_zb
  --@ID nvarchar(10),  --数据表id
   @frdwdm nvarchar(100), --数据表frdwdm
   @bbsj  nvarchar(50),    --数据表bbsj
   @Table nvarchar(50)  --数据表名
AS
 
 DECLARE @SQL nvarchar(4000),@C_Name nvarchar(50)
 set @SQL=\'SELECT *,(select case z.bh \'
 
 --构造游标,从zhb表中提取出数据表的列数和列名,用于动态构造sql
 DECLARE C_Cursor CURSOR FOR
 SELECT bh
 FROM zhb z
 WHERE z.ssbh=@Table
 
 OPEN C_Cursor
 
 FETCH NEXT FROM C_Cursor
 into @C_Name
 WHILE @@FETCH_STATUS = 0
 BEGIN
  set @SQL = @SQL +\'when \' + @C_Name + \' then d.[\' + @C_Name + \'] \'
  FETCH NEXT FROM C_Cursor
  into @C_Name
 END
 --关闭游标
 CLOSE C_Cursor
 DEALLOCATE C_Cursor
 
 set @SQL = @SQL +\'end from \'+  @Table+\' d  where d.frdwdm=\'\'\'+@frdwdm+\'\'\'and d.bbsj=\'\'\'+ @bbsj + \'\'\' and d.bs=\'\'0\'\') value,

(select case z.bh \'
 
 --构造游标,从zhb表中提取出数据表的列数和列名,用于动态构造sql
 DECLARE C_Cursor CURSOR FOR
 SELECT bh
 FROM zhb z
 WHERE z.ssbh=@Table
 
 OPEN C_Cursor
 
 FETCH NEXT FROM C_Cursor
 into @C_Name
 WHILE @@FETCH_STATUS = 0
 BEGIN
  set @SQL = @SQL +\'when \' + @C_Name + \' then d.[\' + @C_Name + \'] \'
  FETCH NEXT FROM C_Cursor
  into @C_Name
 END
 --关闭游标
 CLOSE C_Cursor
 DEALLOCATE C_Cursor
 
 set @SQL = @SQL +\'end from \'+  @Table+\' d  where d.frdwdm=\'\'\'+@frdwdm+\'\'\'and d.bbsj=\'\'\'+ @bbsj + \'\'\' and d.bs=\'\'1\'\') value1

 


 FROM zhb z WHERE z.ssbh=\'\'\' + @Table + \'\'\'\' 
 
 --执行动态sql
 execute sp_executesql @SQL
GO



2.
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = \'SP_Find\' AND type = \'P\')
   DROP PROCEDURE SP_Find
GO

CREATE PROCEDURE SP_Find
AS
 select * from (
 select  d0.*,\'1\' doubleflag from D02_C d0,D02_C d1
 where d0.id<>d1.id and d0.frdwdm=d1.frdwdm and d0.bbsj=d1.bbsj and  d0.bs=1
 union
 select  d.*,\'0\' doubleflag from D02_C d
 where d.id not in(select  d0.id from D02_C d0,D02_C d1
     where d0.id<>d1.id and d0.frdwdm=d1.frdwdm and d0.bbsj=d1.bbsj)) d2
 order by d2.[id]
GO


3.
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = \'SP_test\' AND type = \'P\')
   DROP PROCEDURE SP_test
GO
--存储过程:SP_test
--功    能:关联 表zhb和相关数据表
--     动态构造zhb与数据表之间的关联
CREATE PROCEDURE SP_test
   @ID nvarchar(10),  --数据表id
   @Table nvarchar(50)  --数据表名
AS
 
 DECLARE @SQL nvarchar(2000),@C_Name nvarchar(50)
 set @SQL=\'SELECT *,(select case z.bh \'
 
 --构造游标,从zhb表中提取出数据表的列数和列名,用于动态构造sql
 DECLARE C_Cursor CURSOR FOR
 SELECT bh
 FROM zhb z
 WHERE z.ssbh=@Table
 
 OPEN C_Cursor
 
 FETCH NEXT FROM C_Cursor
 into @C_Name
 WHILE @@FETCH_STATUS = 0
 BEGIN
  set @SQL = @SQL +\'when \' + @C_Name + \' then d.[\' + @C_Name + \'] \'
  FETCH NEXT FROM C_Cursor
  into @C_Name
 END
 --关闭游标
 CLOSE C_Cursor
 DEALLOCATE C_Cursor
 
 set @SQL = @SQL +\'end from \'+  @Table+\' d  where d.id= \'+@ID+\' ) value FROM zhb z WHERE z.ssbh=\'\'\' + @Table + \'\'\'\' 
 
 --执行动态sql
 execute sp_executesql @SQL
GO

posted on 2007-08-13 10:31  水冰月  阅读(145)  评论(0编辑  收藏  举报

分类:

技术点:

相关文章: