• SQL存储过程例子


      存储过程呢,学校里学习的都是简单的。这里是我在工作的时候写的存储过程,贴出来,其中公司相关我都XXX代替了

      (注:这个例子可以算是动态SQL的例子了,写死的是静态SQL,这个很灵活的传入参数的是动态SQL,静态的一次编译多次调用具有安全性。动态的需要次次编译,强大但有安全隐患)  

    USE [XX]
    GO
    /****** Object:  StoredProcedure [dbo].[OneTable]    Script Date: 2018/1/12 9:41:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[OneTable] @TableName nvarchar(50)
    as
    begin
    declare @sql nvarchar(1000)
    select  @sql=isnull(@sql+',','')+quotename(Name) from syscolumns where  id=object_id(@TableName) and name not in ('DATE','TIME')
    declare @sqlstr varchar(4000)
    set @sqlstr='select a.DateTime,b.NodeID,a.SupplyNum,301 as FactoryID from
    (
    SELECT rtrim(convert(varchar,replace([Date],''/'',''-'')))+'' ''+ ltrim(convert(varchar,[Time])) [DateTime] ,P.SupplyNum,p.Supplier
    FROM 
    (
        SELECT top 1 *
         FROM '+@TableName+'
    )T
    UNPIVOT 
    (    
        SupplyNum FOR Supplier IN
        ('+@sql+')
    ) P) a inner join XXXX.dbo.XXX b on a.Supplier=b.TagName' 
    
    ------insert单张表的数据到XXX
    insert XXXX.dbo.XXX    exec(@sqlstr)
    
    ------delete
          declare @mindatestr varchar(50)
          set @mindatestr=CONVERT(VARCHAR(100),getdate()-3,20)
          delete from XXXX.[dbo].XXX where DateTime<@mindatestr
    
    end

      现在我需要只插入20分钟以内的数据,我顿时慌了,动态SQL无法取里面的时间怎么办~~我这是蠢成猪的表现了~~

    经过同事的开导我才恍然大悟,在动态SQL里面加一个时间判断不就好了嘛。。。

    and DATEDIFF(MINUTE,a.DateTime,GETDATE())<20

           像这样。。。人蠢了。。。拦都拦不住。。。

      2018.8.4日更新

      在做数据同步的时候也可以使用这个存储过程,很好用。有一个问题,你在同步数据的时候,要做一个时间的增量判断。不要整张表整张表的数据插入同步。应该是只同步需要更新的数据。

    and DateTime>  dateadd(MINUTE,-1,GETDATE())

    例如上面的sql语句,我同步的那个表的数据是一分钟更新一次的,那我就一分钟同步一次。同步的时候只同步上一分钟的数据。这样就保证了你同步的只是最新的数据。

  • 相关阅读:
    defineProperty的使用
    js题库全集
    如何将多个文件夹中的文件合并到一个文件夹中
    CYQ.Data V5 MDataTable 专属篇介绍
    读取和写入配置文件内容的方法
    面对代码中过多的if...else的解决方法
    SQL语句--删除掉重复项只保留一条
    获取当前时间
    Stopwatch 类用于计算程序运行时间
    正则表达式手册
  • 原文地址:https://www.cnblogs.com/yunquan/p/8274547.html
Copyright © 2020-2023  润新知