小编们必要将有些表里的数据总体要么依照查询条件导出来,你都可以使用此工具举行付出了

假定大家设置了sqlserver二〇〇九 本田UR-V二,将会活动安装一个报表开采工具

有时,我们须求将某些表里的数码总体可能依照查询条件导出来,迁移到另二个相同结构的库中

新公司,新工作试着用sql
存款和储蓄进程写调用,全部结果都回去XML数据集,那是率先个产品,贴出来以做留念.

图片 1

此时此刻SQL
Server里面是从未有过相关的工具依照查询条件来生成INSE本田CR-VT语句的,唯有依靠第二方工具(third
party tools)

 1图片 2— =============================================
 2图片 3— Author:        <tanke>
 3图片 4— Create date: <2007-4-17>
 4图片 5— Description:    <总计访问量和归纳浏览量>
 5图片 6— exec sp_sys_Master ‘<?xml version=”1.0″ encoding=”unicode” ?><report action=”3″ gid=”-774702857″ etime=”2007-4-15″ stime=”2007-4-10″ />’
 6图片 7— =============================================
 7图片 8ALTER PROCEDURE [dbo].[SP_GetData_BrowseVisit]
 8图片 9(
 9图片 10@hDoc int
10图片 11)
11图片 12as
12图片 13Begin
13图片 14    — 参数定义
14图片 15    declare @stime datetime,@etime datetime,@type nvarchar(30),@gid int
15图片 16    declare @tmptab table(cid int,timeid int,the_date datetime,asc_code int)
16图片 17    — 写入一时表视图
17图片 18    INSERT INTO @tmptab(cid,timeid,the_date,asc_code)
18图片 19    SELECT c.id,b.id, b.the_date,c.asc_code
19图片 20    FROM dbo.Fact_PageAccess AS a,dbo.Dim_Date AS b,dbo.Dim_Company AS c
20图片 21    WHERE a.timeid = b.id AND a.cid = c.id
21图片 22
22图片 23    /**//* 生成重临 */
23图片 24    SELECT  @stime=stime,@etime=etime,@gid=gid from openxml(@hDoc,’//report’,1) WITH (stime datetime,etime datetime,gid int)
24图片 25    — 查询
25图片 26    SELECT 1 AS tag,null AS parent,’accountsum/browsesum’ as [report!1!type],@gid as [report!1!gid],convert(varchar(30),@stime,111) as [report!1!stime],convert(varchar(30),@etime,111) as [report!1!etime],null as [detail!2!date],null as [detail!2!count],null as [detail!2!bcount]
26图片 27    UNION ALL
27图片 28    select 2,1,null,null,null,null,the_date, COUNT(*) AS count,
28图片 29    (SELECT COUNT(*) AS bcount FROM dbo.Fact_SiteAccess AS a WHERE (a.timeid = t.timeid AND a.cid=t.cid)) AS bcount 
29图片 30    FROM @tmptab t WHERE asc_code=@gid AND (DATEDIFF(d, @etime, the_date) <= 0) AND (DATEDIFF(d, @stime, the_date) >= 0)
30图片 31    GROUP BY the_date,t.timeid,t.cid
31图片 32    FOR XML EXPLICIT
32图片 33End
33图片 34/**//*
34图片 35— 再次回到结果
35图片 36<xmldata>
36图片 37  <report type=”accountsum/browsesum” stime=”2006-12-01″ etime=”2006-12-04″>
37图片 38    <detail date=”2006-12-01″ count=”” bcount=””/>
38图片 39    <detail date=”2006-12-01″ count=”” bcount=””/>
39图片 40    <detail date=”2006-12-01″ count=”” bcount=””/>
40图片 41  </report>
41图片 42</xmldata>
42图片 43
43图片 44<xmldata>
44图片 45  <action id=”2″ />
45图片 46  <query gid=”-774702857″ stime=”2007-04-11″ etime=”2007-04-11″/>
46图片 47</xmldata>
47图片 48*/

毫无以为此报表开拓工具只适合于sqlserver二〇〇九,其实在sqlserver二〇一二中也是支持的,事实上作者今后项目中正是利用的sqlserver二零一三。

那种本子网上也有那多少个,可是网上的台本依然欠缺1些正规和意义,例如:作者只想导出特定查询条件的数目,网上的剧本都以导出全表数据

由此1番更上壹层楼后,收获照旧挺多的.

运用此工具举行报表开垦,将会充裕便捷并且便于。那里小编透过二个回顾实例来演示它的行使技术,能够不用夸张的说,假使您能使用此工具把这一个德姆o做出来,那么工作中蒙受的十分之八报表,你都能够运用此工具实行付出了。

1旦表相当大,对品质会有相当大影响

 26图片 49— =============================================
 27图片 50— Author:        <tanke>
 28图片 51— Create date: <2007-4-17>
 29图片 52— Description:    <总计访问量和总结浏览量>
 30图片 53— exec sp_sys_Master ‘<xmldata><action id=”3″ /><query gid=”-774702857″ etime=”2007-4-15″ stime=”2007-4-10″ /></xmldata>’
 31图片 54— =============================================
 32图片 55ALTER PROCEDURE [dbo].[SP_GetData_BrowseVisit]
 33图片 56(
 34图片 57@hDoc int
 35图片 58)
 36图片 59as
 37图片 60BEGIN    
 38图片 61    — 化解多余的网络流量
 39图片 62    SET NOCOUNT ON
 40图片 63    
 41图片 64    — 参数定义    
 42图片 65    DECLARE @SQL nvarchar(4000),@stime nvarchar(10),@etime nvarchar(10),@type nvarchar(30),@gid bigint,@sid int,@eid int,@cid int,@s int,@e int,@month nvarchar(2),@part int,@websiteid int;
 43图片 66    — 条件参数
 44图片 67    DECLARE @frmurlid int,@frm nvarchar(30),@frmtypeid int,@frmtype nvarchar(30),@areaid int,@area nvarchar(30),@networkid int,@network nvarchar(30),@shourid int,@ehourid int,@keyid int,@keyname nvarchar(30)
 45图片 68    — 临时表
 46图片 69    DECLARE @tmptable TABLE([id] [bigint],    [cid] [int],[sid] [int],[websiteid] int,[pageid] [bigint],    [timeid] [int],    [intime] [smalldatetime] ,[outtime] [smalldatetime] ,[spantime] [int],[pagevalue] [int],[pvalue] [int] ,[vorder] [int] ,[Tag] [int],areaid int,networkid int,frmurlid int,frmtypeid int,keyid int,hourid int)
 47图片 70    
 48图片 71    — 生成归来
 49图片 72    SELECT @stime=stime,@etime=etime,@gid=gid,@frm=isnull(frm,”),@frmtype=frmtype,@area=area,@network=network,@shourid=isnull(shourid,0),@ehourid=isnull(ehourid,0),@keyname=isnull(keyname,’未知’) from openxml(@hDoc,’//query’,1) WITH (stime nvarchar(10),etime nvarchar(10),gid bigint,frm nvarchar(30),frmtype nvarchar(30),area nvarchar(30),network nvarchar(30),shourid int,ehourid int,keyname nvarchar(30));
 50图片 73    
 51图片 74    — 查询条件 —
 52图片 75    — 公司ID和站点ID
 53图片 76    SELECT @cid=cid,@websiteid=id FROM dbo.Dim_WebSite WHERE asc_code=@gid;
 54图片 77    — 起初时间
 55图片 78    SELECT @sid=id FROM dbo.Dim_Date WHERE the_date=@stime
 56图片 79    — 结束时间
 57图片 80    SELECT @eid=id FROM dbo.Dim_Date WHERE the_date=@etime
 58图片 81    — 平台来源 
 59图片 82    SELECT @frmurlid=id FROM Dim_ComeFrom WHERE [name]=@frm
 60图片 83    — 来源定义
 61图片 84    SELECT @frmtypeid=id FROM Dim_ComeFromType WHERE frmtype=@frmtype
 62图片 85    — 访客所在地段 (省份或城市)
 63图片 86    SELECT @areaid=id FROM Dim_Area WHERE city=@area OR province=@area
 64图片 87    — 网络提供商
 65图片 88    SELECT @networkid=id FROM dim_network WHERE network=@network
 66图片 89    — 时间段(开始/结束)
 67图片 90    if @shourid>0
 68图片 91        SELECT @shourid=@shourid+1
 69图片 92    if @ehourid>0    
 70图片 93        SELECT @ehourid=@ehourid+1
 71图片 94    — 关键字
 72图片 95    SELECT    @keyid=id FROM Dim_KeyWord WHERE keywordname=@keyname
 73图片 96        select @part=@cid/200+一    ——-查找分区
 74图片 97    
 75图片 98    set @s=cast(substring(@stime,6,2) as int)
 76图片 99    set @e=cast(substring(@etime,6,2) as int)
 77图片 100    if @s=@e
 78图片 101        begin
 79图片 102            if @s<10
 80图片 103                set @month=’0’+cast(@s as nvarchar(1))
 81图片 104            else
 82图片 105                set @month=cast(@s as nvarchar(2))
 83图片 106            set @SQL=’SELECT a.*,b.areaid,b.networkid,b.frmurlid,b.frmtypeid,b.keyid,b.hourid FROM Fact_PageAccess_’+@month+’ a’+
 84图片 107                 ‘ inner join Fact_SiteAccess_’+@month+’ b on a.sid=b.sid’+
 85图片 108                 ‘ WHERE  a.timeid>=’+cast(@sid as nvarchar(10))+’ AND a.timeid<=’+cast(@eid as nvarchar(10))+
 86图片 109                 ‘ and a.websiteid=’+cast(@websiteid as nvarchar(10))+
 87图片 110                 ‘ AND $PARTITION.[CidRangePFN](a.cid)=’+cast(@part as nvarchar(3))+
 88图片 111                 ‘ AND $PARTITION.[CidRangePFN](b.cid)=’+cast(@part as nvarchar(3))
 89图片 112        end
 90图片 113    else
 91图片 114        begin
 92图片 115            set @SQL=’select * from (‘
 93图片 116            while @s<@e+1
 94图片 117                begin
 95图片 118                    if @s<10
 96图片 119                        set @month=’0’+cast(@s as nvarchar(1))
 97图片 120                    else
 98图片 121                        set @month=cast(@s as nvarchar(2))
 99图片 122                    set @SQL=@SQL+ ‘
100图片 123                                SELECT a.*,b.areaid,b.networkid,b.frmurlid,b.frmtypeid,b.keyid,b.hourid from Fact_PageAccess_’+@month+’ a’+
101图片 124                                ‘ inner join Fact_SiteAccess_’+@month+’ b on a.sid=b.sid’+
102图片 125                                ‘ WHERE  a.timeid>=’+cast(@sid as nvarchar(10))+’ AND a.timeid<=’+cast(@eid as nvarchar(10))+
103图片 126                                ‘ and a.websiteid=’+cast(@websiteid as nvarchar(10))+
104图片 127                                ‘ AND $PARTITION.[CidRangePFN](a.cid)=’+cast(@part as nvarchar(3))+
105图片 128                                ‘ AND $PARTITION.[CidRangePFN](b.cid)=’+cast(@part as nvarchar(3))
106图片 129                if @s<@e
107图片 130                    set @SQL=@SQL+’ UNION ALL ‘
108图片 131                else
109图片 132                    set @SQL=@SQL+’ ) z where 1=1′
110图片 133                set @s=@s+1
111图片 134                end
112图片 135        END
113图片 136        
114图片 137    if @frmurlid>0
115图片 138        set @SQL=@SQL+’ and frmurlid=’+cast(@frmurlid as nvarchar(10))    
116图片 139    if @networkid>0
117图片 140        set @SQL=@SQL+’ and networkid=’+cast(@networkid as nvarchar(10))
118图片 141    if @areaid>0
119图片 142        set @SQL=@SQL+’ and areaid=’+cast(@areaid as nvarchar(10))
120图片 143    if @keyid>0
121图片 144        set @SQL=@SQL+’ and keyid=’+cast(@keyid as nvarchar(10))    
122图片 145    if @frmtypeid>0
123图片 146        set @SQL=@SQL+’ and frmtypeid=’+cast(@frmtypeid as nvarchar(10))
124图片 147    if @shourid>0
125图片 148        set @SQL=@SQL+’ and hourid>=’+cast(@shourid as nvarchar(10))
126图片 149    if @ehourid>0
127图片 150        set @SQL=@SQL+’ and hourid<=’+cast(@ehourid as nvarchar(10))
128图片 151        
129图片 152    PRINT @SQL
130图片 153    INSERT INTO @tmptable
131图片 154    EXEC(@SQL)
132图片 155    
133图片 156    SELECT 
134图片 157        1 AS tag,
135图片 158        null AS parent,
136图片 159        ‘accountsum/browsesum’ AS [report!1!type],
137图片 160        @stime AS [report!1!stime],
138图片 161        @etime AS [report!1!etime],
139图片 162        null AS [detail!2!date],
140图片 163        null AS [detail!2!count],
141图片 164        null AS [detail!2!bcount]
142图片 165    UNION ALL
143图片 166    SELECT 
144图片 167        2,
145图片 168        1,
146图片 169        null,
147图片 170        null,
148图片 171        null,
149图片 172        b.the_date,
150图片 173        COUNT(DISTINCT a.sid) count, 
151图片 174        COUNT(*) bcount
152图片 175    FROM @tmptable a
153图片 176    INNER JOIN dbo.Dim_Date b ON b.id=a.timeid
154图片 177    GROUP BY b.the_date
155图片 178    FOR XML EXPLICIT,root(‘xmldata’),type
156图片 179End
157图片 180/*
158图片 181— 再次来到结果
159图片 182<xmldata>
160图片 183  <report type=”accountsum/browsesum” stime=”2006-12-01″ etime=”2006-12-04″>
161图片 184    <detail date=”2006-12-01″ count=”” bcount=””/>
162图片 185    <detail date=”2006-12-01″ count=”” bcount=””/>
163图片 186    <detail date=”2006-12-01″ count=”” bcount=””/>
164图片 187  </report>
165图片 188</xmldata>
166图片 189*/

先来看下我们要兑现的效应:

 

http://www.cnblogs.com/tanke/archive/2007/05/08/739217.aspx

图片 190

 

 

sqlserver
自增ID插入内定数量

报表中采取到的表及字段:

 

[sql] view
plain
copy图片 191图片 192

set identity_insert 表名 ON --允许对自增列Id插入指定数据
insert into table_name(Id,Name) values(1,'test')
set identity_insert 表名 OFF --关闭对自增列Id插入指定数据
  1. –table 用水水量:hx_t_waterusedamount  
  2. –字段 开户新闻:hx_fcustomerandmeterrelaid 主键:hx_t_WaterUsedAmountId  水表:hx_fmeterid 区段:hx_fzone 实用水量:hx_famount   
  3. –估水原因:hx_festimateamountreason  买单水量:hx_fpayamount  
  4. –抄表类型hx_frecordtype (估水:,000,00一 未抄见:十0,000,002 平常:100,000,000 预支费卡表估水:十0,000,003)   
  5. –水量状态:hx_fstate(安排:十0,000,000,已录入水量:100,000,001,等待录入金额:100,000,00二,已转移应收:十0,000,00陆,等待审核:100,000,00肆)   
  6. <span style=”font-family:小篆;”>–</span>本次抄表止度:hx_freading  
  7. –用水年份:hx_fyear  用水月份:hx_fmonth 次:hx_FTimes   
  8. –此番抄表时间:hx_frecorddate  猜度水费:hx_fprepayment 测度代收取金钱:hx_fpreproxypayment  
  9.   
  10. –table 用水体系hx_t_watercategory  
  11. –田野先生 计算1类:hx_fstatcategoryoneid 主键:hx_t_watercategoryid 名称:hx_fname  
  12.   
  13. –table 用水性质hx_t_waterproperty  
  14. –field 主键:hx_t_waterpropertyid 用水种类:hx_fwatercategoryid  
  15.   
  16. –table 抄表班组归属hx_t_teamattribution  
  17. –字段主键:hx_t_teamattributionid 抄表班组音讯:hx_fteamid 征费所音讯:hx_flevyinstituteid  

 — Author:      <桦仔>
— Blog:        <http://www.cnblogs.com/lyhabc/&gt;
— Create date: <2014/10/18>
— Description: <依据查询条件导出表数据的insert脚本>
— =============================================
CREATE  PROCEDURE InsertGenerator
    (
      @tableName NVARCHAR(MAX),
      @whereClause NVARCHAR(MAX)
    )
AS

好了,今后行业内部开首

–Then it includes a cursor to fetch column specific information (column
name and the data type thereof)
–from information_schema.columns pseudo entity and loop through for
building the INSERT and VALUES clauses
–of an INSERT DML statement.

从成效图上边能够见见,此报表,我们运用到了两张表来展现,而且那里是应用到了四个数据集,可是她们的查询条件是相同的。

    DECLARE @string NVARCHAR(MAX) –for storing the first half of INSERT
statement
    DECLARE @stringData NVARCHAR(MAX) –for storing the data (VALUES)
related statement
    DECLARE @dataType NVARCHAR(MAX) –data types returned for respective
columns
    DECLARE @schemaName NVARCHAR(MAX) –schema name returned from
sys.schemas
    DECLARE @schemaNameCount int–shema count
    DECLARE @QueryString  NVARCHAR(MAX) — provide for the whole
query,

小编们先来看上边那张表的展现

    set @QueryString=’ ‘

 图片 193

     –假若有多个schema,采用之中3个schema
    SELECT @schemaNameCount=COUNT(*)
    FROM    sys.tables t
            INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    WHERE   t.name = @tableName

咱俩来看SQL:

    WHILE(@schemaNameCount>0)
    BEGIN

[sql] view
plain
copy图片 194图片 195

    –借使有多少个schema,依次钦赐
    select @schemaName = name
    from
    (
        SELECT ROW_NUMBER() over(order by  s.schema_id) RowID,s.name
        FROM    sys.tables t
                INNER JOIN sys.schemas s ON t.schema_id =
s.schema_id
        WHERE   t.name =  @tableName
    ) as v
    where RowID=@schemaNameCount

  1. declare @begin_date datetime  
  2. declare @end_date datetime  
  3. select @begin_date = getdate()  
  4.   
  5. declare @BusinessunitId uniqueidentifier –征费所  
  6. –set @BusinessunitId=’陆A253七DD-B87A-E41一-玖三FE-002590622897′ —-第95收取费用所  
  7. DECLARE @TeamId uniqueidentifier –抄表班组  
  8. –SET @TeamId=’1八ACBD八壹-5B肆5-E41一-940贰-陆CAE8B22702D’ –第八伍收取费用所(零散查表组)  
  9. DECLARE @StarDate datetime  
  10. DECLARE @EndDate datetime  
  11. SET @StarDate =  convert(datetime,’2015-01-15 00:00:00′,20)  
  12. SET @EndDate = convert(datetime,’2015-01-25 23:59:59′,20)  
  13. DECLARE @sHMS nvarchar(10)  
  14. DECLARE @eHMS nvarchar(10)  
  15. SET @sHMS=’00:00:00′;  
  16. SET @eHMS=’23:59:59′;  
  17. DECLARE @ZoneNO varchar(30)  
  18.   
  19. —————–SQL正文———————————————————-执行时间:  
  20. DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)  
  21. DECLARE @StartDateTime datetime,@EndDateTime datetime  
  22. SET @strSDate=CONVERT(varchar, @StarDate, 23)+’ ‘+@sHMS  
  23. SET @strEDate=CONVERT(varchar, @EndDate, 23)+’ ‘+@eHMS  
  24. SET @StartDateTime=convert(datetime,@strSDate,20)  
  25. SET @EndDateTime=convert(datetime,@strEDate,20)  
  26. ————————————-上面的表————————————————-  
  27. select   
  28. 1 WaterMeterCount, –表数  
  29. w.hx_fpayamount, –水量  
  30. w.hx_fprepayment,–猜测水费  
  31. w.hx_fpreproxypayment,–推断代收取金钱  
  32. c.hx_fname –用水项目  
  33.  from   
  34. hx_t_waterusedamount w –水量  
  35. INNER JOIN hx_t_teamattribution n –抄表班组归属  
  36.     ON w.OwningTeam=n.hx_fteamid  
  37. AND isnull(w.hx_fzone,”) = isnull(isnull(@ZoneNO,w.hx_fzone),”)   
  38. AND isnull(w.OwningTeam,’00000000-0000-0000-0000-000000000000′) = isnull(isnull(@TeamId,w.OwningTeam),’00000000-0000-0000-0000-000000000000′)   
  39. AND w.hx_fpayamount>0 –买单水量  
  40. AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime   
  41. AND isnull(n.hx_flevyinstituteid,’00000000-0000-0000-0000-000000000000′) = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),  
  42. ‘00000000-0000-0000-0000-000000000000’)   
  43. LEFT JOIN hx_t_waterproperty p –用水质量  
  44. on w.hx_FWaterPropertyID=p.hx_t_WaterPropertyId  
  45. LEFT JOIN hx_t_watercategory c –用水项目  
  46. on p.hx_FWaterCategoryID=c.hx_t_WaterCategoryId  
  47.   
  48. —————–END—————————————————————————-  
  49. select @end_date = getdate()  
  50. select datediff(ms,@begin_date,@end_date) as ‘用时/毫秒’  

    –Declare a cursor to retrieve column specific information
    –for the specified table
    DECLARE cursCol CURSOR FAST_FORWARD
    FOR
        SELECT  column_name ,
                data_type
        FROM    information_schema.columns
        WHERE   table_name = @tableName
                AND table_schema = @schemaName
 
    OPEN cursCol
    SET @string = ‘INSERT INTO [‘ + @schemaName + ‘].[‘ + @tableName

施行结果如下:

  • ‘](‘
        SET @stringData = ”

图片 196

    DECLARE @colName NVARCHAR(500)

能够见到那是那个科学普及的纵表变横表了,假若使用纯sql来落到实处转移职能的话,就有得写一而再串扑朔迷离的sql语句了,不过透过使用此报表开荒工具,我们得以毫不费力的将其纵向展现结果变成横向彰显结果。

    FETCH NEXT FROM cursCol INTO @colName, @dataType

操作步骤如下:

    PRINT @schemaName
    PRINT @colName
    IF @@fetch_status <> 0
        BEGIN
            PRINT ‘Table ‘ + @tableName + ‘ not found, processing
skipped.’
            CLOSE curscol
            DEALLOCATE curscol
            RETURN
        END

一、张开此报表开采工具,文件——新建——项目

    WHILE @@FETCH_STATUS = 0
        BEGIN
            IF @dataType IN ( ‘varchar’, ‘char’, ‘nchar’, ‘nvarchar’ )
                BEGIN
                       SET @stringData = @stringData + ””””’+
                            isnull(‘ + @colName + ‘,””)+”””,”+’
                END
            ELSE
                IF @dataType IN ( ‘text’, ‘ntext’ ) –if the datatype
                                 –is text or something else
                    BEGIN
                        SET @stringData = @stringData + ””””’+
          isnull(cast(‘ + @colName + ‘ as
nvarchar(max)),””)+”””,”+’
                    END
                ELSE
                    IF @dataType = ‘money’ –because money doesn’t get
converted
                       –from varchar implicitly
                        BEGIN
                            SET @stringData = @stringData
                                + ”’convert(money,”””+
        isnull(cast(‘ + @colName
                                + ‘ as
nvarchar(max)),”0.0000”)+”””),”+’
                        END
                    ELSE
                        IF @dataType = ‘datetime’
                            BEGIN
                                SET @stringData = @stringData
                                    + ”’convert(datetime,”””+
        isnull(cast(‘ + @colName + ‘ as
nvarchar(max)),”0”)+”””),”+’
                            END
                        ELSE
                            IF @dataType = ‘image’
                                BEGIN
                                    SET @stringData = @stringData +
””””’+
       isnull(cast(convert(varbinary,’ + @colName + ‘)
       as varchar(6)),”0”)+”””,”+’
                                END
                            ELSE –presuming the data type is
int,bit,numeric,decimal
                            BEGIN
                                    SET @stringData = @stringData +
””””’+
          isnull(cast(‘ + @colName + ‘ as
nvarchar(max)),”0”)+”””,”+’
                                END

图片 197

            SET @string = @string + ‘[‘ + @colName + ‘]’ + ‘,’

贰、右键单击左边消除方案中的报表目录,然后直接下一步,

            FETCH NEXT FROM cursCol INTO @colName, @dataType
        END
–After both of the clauses are built, the VALUES clause contains a
trailing comma which needs to be replaced with a single quote. The
prefixed clause will only face removal of the trailing comma.

图片 198

    DECLARE @Query NVARCHAR(MAX) — provide for the whole query,
                              — you may increase the size
    PRINT @whereClause
    IF ( @whereClause IS NOT NULL
         AND @whereClause <> ”
       )
        BEGIN  
            SET @query = ‘SELECT ”’ + SUBSTRING(@string, 0,
LEN(@string))
                + ‘) VALUES(”+ ‘ + SUBSTRING(@stringData, 0,
                                              LEN(@stringData) – 2)
                + ”’+”)”
   FROM ‘ +@schemaName+’.’+ @tableName + ‘ WHERE ‘ + @whereClause
            PRINT @query
           — EXEC sp_executesql @query –load and run the built
query
–Eventually, close and de-allocate the cursor created for columns
information.
        END
    ELSE
  BEGIN
            SET @query = ‘SELECT ”’ + SUBSTRING(@string, 0,
LEN(@string))
                + ‘) VALUES(”+ ‘ + SUBSTRING(@stringData, 0,
                                              LEN(@stringData) – 2)
                + ”’+”)”
    FROM ‘ + @schemaName+’.’+ @tableName

图片 199

        END

图片 200图片 201

    CLOSE cursCol
    DEALLOCATE cursCol

但是思量到矩阵的分界面配置卓殊反锁,那里大家先选用表格吧,然后径直点击下一步,直到实现

    SET @schemaNameCount=@schemaNameCount-1
    IF(@schemaNameCount=0)
    BEGIN
       SET @QueryString=@QueryString+@query
    END
    ELSE
    BEGIN
        SET @QueryString=@QueryString+@query+’ UNION ALL ‘
    END
    PRINT convert(varchar(max),@schemaNameCount)+’—‘+@QueryString
    END
    EXEC sp_executesql @QueryString –load and run the built query
–Eventually, close and de-allocate the cursor created for columns
information.

图片 202

此处要声澳优(Ausnutria Hyproca)下,假设你有五个schema,并且各个schema上面都有壹致张表,那么脚本只会生成在那之中二个schema上面包车型客车表insert脚本

一、把界面上边的报表删掉,然后从左侧工具栏拖入一个矩阵,

例如自身后天有五个schema,上面都有customer这几个表

图片 203

图片 204

入选“数据”单元格,右键——插入行——组内部——下方,加多4行,然后右键——插入列——组外部(因为要总结合计)

CREATE TABLE dbo.[customer](city int,region int)

CREATE SCHEMA test
CREATE TABLE test.[customer](city int,region int)

CREATE SCHEMA test1
CREATE TABLE test1.[customer](city int,region int)

图片 205

图片 206

列那几个地点,选拔hx_fname那几个字段,从sql中得以见到hx_fname这些字段是大家供给改造为横表体现的字段,然后数据这里,选中要汇聚的字段。

在举办脚本的时候她只会生成dbo那些schema下边包车型地铁表insert脚本

左侧报表数量,

INSERT INTO [dbo].[customer]([city],[region]) VALUES('1','2')

图片 207

 

此地自动生成了很多参数,这一个参数是因为大家刚才加多的SQL语句里面用到了,注意看名称,和大家刚刚注解的SQL语句是一样的。

其一本子有三个欠缺

当选属性,右键单击,能够查阅参数的布署新闻

不论是你的表的字段是什麽数据类型,导出来的时候只可以是字符

那个事物我们多去点一下,自然就熟识了,涉及的事物太多了,小编瞬间也说不完。

表结构

那边有几个参数是有级联关系的,作者就先说下

CREATE TABLE [dbo].[customer](city int,region int)

图片 208

 

小编们来看下那三个参数的布置,那五个参数都以以下拉框的格局显得的,而且值都是取自数据库中。

导出来的insert脚本

先看参数:BusinessunitId

INSERT INTO [dbo].[customer]([city],[region]) VALUES('1','2')

图片 209图片 210

 

以此数额集哪个地方来的?大家得以自个儿加上

 

图片 211图片 212

自个儿那边演示一下怎麽用

再来看下参数:TeamId

有二种办法

图片 213图片 214图片 215图片 216

1、导全表数据

右键单击空白处——创造占位符

InsertGenerator 'customer', null

图片 217图片 218图片 219图片 220图片 221

 

InsertGenerator 'customer', ' '

批量修改能够直接通过此处开始展览改变,

图片 222

要不然,只可以3个文本框一个文件框属性进行修改了。#表示千分位显示,前面包车型客车数字代码保留小数位数,0代表整数

 

数量/水量:#,0

二、根据查询条件导数据

单价:0.00

InsertGenerator 'customer', 'city=3'

金额:#,0.00

或者

报表中下边那些程序集的操作看似,那里就不多说了,东西太多了。

InsertGenerator 'customer', 'city=3 and region=8'

图片 223

图片 224

SQL如下:

点击一下,选用一切

[sql] view
plain
copy图片 225图片 226

图片 227

  1. —————-SQL正文———————————————————-执行时间:  
  2. DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)  
  3. DECLARE @StartDateTime datetime,@EndDateTime datetime  
  4. SET @strSDate=CONVERT(varchar, @StarDate, 23)+’ ‘+@sHMS  
  5. SET @strEDate=CONVERT(varchar, @EndDate, 23)+’ ‘+@eHMS  
  6. SET @StartDateTime=convert(datetime,@strSDate,20)  
  7. SET @EndDateTime=convert(datetime,@strEDate,20)  
  8. ———————————-上边的表——————————————————  
  9. if object_id(‘tempdb..#t_estimateamountreason’) is not null drop table #t_estimateamountreason  
  10.   
  11. select * into #t_estimateamountreason from     
  12. (select distinct t1.Label,t2.Value from MetadataSchema.LocalizedLabel t1     
  13. inner join MetadataSchema.AttributePicklistValue t2    
  14.  on t1.ObjectId=t2.AttributePicklistValueId inner join MetadataSchema.OptionSet t3 on t2.OptionSetId=t3.OptionSetId     
  15.  where t3.Name=’hx_estimateamountreason_values’ and t1.ObjectColumnName=’DisplayName’ and t1.LanguageId=2052) t  
  16. –select * from #t_estimateamountreason   
  17.    
  18. select  
  19. 一 MeterCounts, –水表块数  
  20. isnull(e.Label,’其余’) ReasonName  –估水原因名称  
  21. from hx_t_waterusedamount w –水量   
  22. INNER JOIN hx_t_teamattribution n  –抄表班组归属  
  23.     ON w.OwningTeam=n.hx_fteamid   
  24. AND isnull(w.hx_fzone,”) = isnull(isnull(@ZoneNO,w.hx_fzone),”)   
  25. AND isnull(w.OwningTeam,’00000000-0000-0000-0000-000000000000′) = isnull(isnull(@TeamId,w.OwningTeam),’00000000-0000-0000-0000-000000000000′)   
  26. AND w.hx_fpayamount=0 –结账水量  
  27. AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime   
  28. AND isnull(n.hx_flevyinstituteid,’00000000-0000-0000-0000-000000000000′) = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),  
  29. ‘00000000-0000-0000-0000-000000000000’)    
  30. LEFT JOIN #t_estimateamountreason e –估水原因   
  31.     ON e.Value=w.hx_festimateamountreason     
  32.       
  33. UNION ALL    
  34. select 1 MeterCounts,e.Label ReasonName from #t_estimateamountreason e   
  35.     
  36.  if object_id(‘tempdb..#t_estimateamountreason’) is not null drop table #t_estimateamountreason  
  37. —————-END—————————————————————————- 

接下来复制

图片 228

新建三个询问窗口,然后粘贴

图片 229

 

实则SQLServer的技能有诸多

最后,我们可以看一下代码,万分轻便,如果要支持SQLServer3000,只要改一下代码就能够了

 

填补:创制一张测试表

图片 230

CREATE TABLE testinsert (id INT,name VARCHAR(100),cash MONEY,dtime DATETIME)


INSERT INTO [dbo].[testinsert]
        ( [id], [name], [cash], [dtime] )
VALUES  ( 1, -- id - int
          'nihao', -- name - varchar(100)
          8.8, -- cash - money
          GETDATE()  -- dtime - datetime
          )

SELECT * FROM [dbo].[testinsert]

图片 231

测试

InsertGenerator 'testinsert' ,''

InsertGenerator 'testinsert' ,'name=''nihao'''

InsertGenerator 'testinsert' ,'name=''nihao'' and cash=8.8'

datetime类型会有1对难点

 

改换的结果会自行帮您转移

INSERT INTO [dbo].[testinsert]([id],[name],[cash],[dtime]) VALUES('1','nihao',convert(money,'8.80'),convert(datetime,'02  8 2015  5:17PM'))

 

 


 

群里的人共享的另1个本子

图片 232 View Code

 

 

调用示例

图片 233

--非dbo默认架构需注意
--支持数据类型 :bigint,int, bit,char,datetime,date,time,decimal,money, nvarchar(50),tinyint, nvarchar(max),varchar(max),datetime2
--调用示例 如果top行或者where条件为空,只需要把参数填上null

spGenInsertSQL 'customer' --表名
, 2 --top 行数
, 'city=3 and didian=''大连'' '  --where 条件

--导出全表 where条件为空
spGenInsertSQL 'customer' --表名
, null --top 行数
,null --where 条件

INSERT INTO [Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (1,N'售后部',N'销售组',N'中国你好有限公司XX分公司','05  5 2015  5:58PM')
INSERT INTO [Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (2,N'售后部',N'销售组',N'中国你好有限公司XX分公司','05  5 2015  5:58PM')

图片 234

 

 

如有不对的地方,欢迎我们拍砖o(∩_∩)o 

正文版权归作者全部,未经小编同意不得转发。

相关文章