zoukankan      html  css  js  c++  java
  • 合并两个动态字段表面的数据

    阅读全文:http://www.sufeinet.com/thread-127-1-1.html                                                                                                                                                                                                

    分割的函数

    代码
    create FUNCTION [dbo].[SpitString] 

    @string nvarchar(500),--被分的字符串 
    @sp nvarchar(100--分隔符 

    RETURNS 
    @_strings TABLE 

    id 
    int
    string 
    nvarchar(64),
    inx 
    int,
    str1 
    nvarchar(65

    AS 
    BEGIN 
    declare @count int --计数 
    set @count=0 
    declare @index int 
    declare @one nvarchar(64)--取下来的一节 
    set @index=Charindex(@sp,@string
    while(@index>0
    begin 
    set @one=left(@string,@index-1
    set @count=@count+1
    insert into @_strings (id,string,inx,str1) values(@count,@one,@index,@string
    set @string=right(@string,len(@string)-@index
    set @index=Charindex(@sp,@string
    end 
    insert into @_strings (id,string,inx,str1) values(@count+1,@string,@index,@one
    RETURN 
    END 
    go

    --SELECT * FROM [dbo].[SpitString] ('asdads,ad,sadsa,d,w,dsa,dsa,d,sad,sa,' ,',')


    存储过程

    代码


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    -- =============================================
    --
     Author:  <Author,,sufei>
    --
     Create date: <Create Date,,200909025>
    --
     Description: <合并表dbo.GameFieldMessages和dbo.FieldValues表的数据>
    --
     =============================================
    ALTER PROCEDURE  [dbo].[G_GameFieldMessagesToFieldValues]
    @GNID int 
    AS
    BEGIN
    begin tran 
      
    declare @F int ;
      
    set @F=1;--表示事务执行成功
      --取出来数据库里的值
      declare @strCell varchar(8000);
      
    set @strCell='GNId '
      
    declare @strFiled varchar(8000);
      
    select @strFiled=FID  from dbo.GameFieldMessages where GFMID=@GNID
      
    set @F=@F+@@error;
      
    declare @i int ; --变义变量@i
      SELECT  @i=count(*FROM [dbo].[SpitString] (@strFiled ,',');
      
    declare @j int;  --变义变量
      set @j=2;
      
    declare @cluid varchar(500);
      
    set @cluid='';
      
    --先清理一下表
      --if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[newFeledMessages]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
      --drop table [dbo].[newFeledMessages]
      declare @tablename varchar(100);
      
    set @tablename='a'+Replace(Replace(CONVERT(VARCHAR(30),GETDATE(),9),' ','a'),':','b');
      
    print @tablename
      
    declare @strTable varchar(8000);
      
    set @strTable='CREATE TABLE '+@tablename+'(
       [GFMID] [int] IDENTITY(1,1) NOT NULL,
       [GNId] [int] NULL,
       CONSTRAINT PK_newFeledMessages
    '+@tablename+' PRIMARY KEY CLUSTERED 
      (
       [GFMID] ASC
      ) ON [PRIMARY]
      ) ON [PRIMARY]
    '
      
    exec(@strTable)
      
    set @F=@F+@@error;

       
    --给新表添加字段
       while @j <= @i
       
    begin
       
    SELECT  @cluid=string FROM [dbo].[SpitString] (@strFiled ,','where id=@j
       
    --print @cluid 
       --行到列的ID
         declare @clu varchar(300);
         
    set @clu='';
       
    --得到列的名称
       select @clu=FName from dbo.FieldInFo where FID=@cluid 
       
    --加新列
       exec ('alter table  '+@tablename+' add '+@clu+' varchar(50) null default null with values')
       
    set @F=@F+@@error;
       
    set @strCell=@strCell+','+@clu;
                
    set @j = @j + 1
       
    end
    --  print @strCell
    --
    -现在应该添数据了
      declare @strvalues varchar(8000);
      
    Declare Mycursor cursor for select Vaules from dbo.FieldValues where GFMID=@GNID
      
    Open Mycursor                                  --打开游标 
      Fetch next from Mycursor into @strvalues     --开始抓数据 
      while @@FETCH_STATUS = 0
        
    begin 
        
    --select @strvalues=Vaules  from dbo.FieldValues where GFMID=@GNID
        declare @t int ; --变义变量
        SELECT  @t=count(*FROM [dbo].[SpitString] (@strvalues ,',');
        
    declare @k int;  --变义变量
        set @k=2;
        
    declare @clu1 varchar(300);
        
    set @clu1='';
        
    declare @strTalbeValues varchar(8000);
        
    set @strTalbeValues=N''''+str(@GNID);
        
    --      给新表添加字段 
          while @k <= @t
          
    begin
          
    SELECT  @clu1=string FROM [dbo].[SpitString] (@strvalues ,','where id=@k
          
    set @strTalbeValues=@strTalbeValues+N''','''+@clu1;        
        
    --      加新列
          set @k = @k + 1
          
    end
        
    print @strTalbeValues
        
    exec (N'insert into '+@tablename+'('+@strCell+N')values('+@strTalbeValues+N''')')
        
    set @F=@F+@@error;
        
    Fetch next from Mycursor into @strvalues
        
    end
      
    Close Mycursor                         --关闭游标 
      Deallocate Mycursor                    --删除游标 
      --查询看的内容
      set @strTable ='select * from '+@tablename
      
    exec(@strTable)
      
    set @F=@F+@@error;
      
    --删除表
      set @strTable='drop table '+@tablename
      
    exec(@strTable)
      
    set @F=@F+@@error;
            
    --事务处理
      if(@F>0)
      
    begin
        
    commit tran;
      
    end
      
    else
      
    begin
      
    rollback tran;
      
    end
    end
    --exec G_GameFieldMessagesToFieldValues 26

    本人的博客不再维护从2013年就不再维护了 需要我帮助的朋友请到我的个人论坛 http://www.sufeinet.com 进行讨论,感谢大家对我的支持!
  • 相关阅读:
    JMeter使用正则表达式提取相应信息
    Python的configparser生成配置文件,以及相关操作
    Python函数主要的作用
    Python函数传参位置关系总结
    Python中的作用域
    Python高阶函数解析
    Python中set集合的增加,update和add的区别
    Oracle 11g服务详细介绍及哪些服务是必须开启的?
    javacc jjtree 写法 以及 jj写法 基本语法 以及应用
    Python 3.3 try catch所有的错误Error,不包括Exception。关键在于 sys.exc_info()
  • 原文地址:https://www.cnblogs.com/sufei/p/1574417.html
Copyright © 2011-2022 走看看