存储过程一个简单编写样式与为什么创建存储过程时不执行操作的原因

今天我接收到一个任务就是创建一个数据脚本再原来8万条数据的基础上插入剩下的数据,总共数据为2千万条。之前是创建一个文本文件,进行上传导入数据的,但这个导入数据的时是要有6个月的时间跨度,那么上传一天一个文本,那就要创建180个文本文件,那是得不偿失的。因此想到了数据脚本写存储过程。

这是我简单插入数据,并根据一定的数量进行时间累加的存储过程脚本:

USE [eRAS]
GO

/****** Object:  StoredProcedure [dbo].[AddSrcCCAUTH]    Script Date: 2019/04/26 14:41:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[AddSrcCCAUTH]
    -- Add the parameters for the stored procedure here
    
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    declare @i int,@Card varchar(20),@count int,@datenow DateTime,@oldCount int
    --还需添加的数
    select @i=80001;
    --获取当前的时间
    select @datenow=GETDATE();
    select @oldCount=0;
    while(@i<=20000000)
    begin
    --设置卡号
    select @Card=‘42019‘+RIGHT(‘00000000000‘+CAST(@i as varchar),11);
    --计算需要添加时间的天数
    select @count=(@i-80000)/110667;

if(@[email protected])
    begin
    select @[email protected];
    select @datenow=DATEADD(DAY,1,@datenow);
    end

-- Insert statements for procedure here
    INSERT INTO dbo.SrcCCAUTH ([ID]
      ,[MEROUT_CARD_NBR]
      ,[MEROUT_ORIG_CURR_CODE]
      ,[MEROUT_ORIG_AMT]
      ,[MEROUT_LOCAL_MT]
      ,[MEROUT_MCC]
      ,[MEROUT_CHANNEL_IND]
      ,[MEROUT_TXN_AUTH_DATE]
      ,[MEROUT_TXN_AUTH_TIME]
      ,[MEROUT_TXN_COUNTRY]
      ,[MEROUT_REFERENCE_NBR]
      ,[MEROUT_UNIQUE_DATE]
      ,[MEROUT_UNIQUE_TIME]
      ,[MEROUT_UNIQUE_AUDT_TRACE]
      ,[MEROUT_UNIQUE_ACQ_ID]
      ,[MEROUT_UNIQUE_FWD_ID]
      ,[MEROUT_AVAILBLE_AMOUNT]
      ,[MEROUT_ACCOUNT_NBR]
      ,[MEROUT_PROCESS_CODE]
      ,[MEROUT_EAS_TC]
      ,[MEROUT_INPUT_SOURCE]
      ,[MEROUT_POS_ENTRY_MODE]
      ,[MEROUT_MERCH_NAME_LOC]
      ,[MEROUT_POS_COND_CODE]
      ,[MEROUT_MC_CARD_PRESENT]
      ,[MEROUT_AUTH_CODE]
      ,[MEROUT_LONG_DESC]
      ,[FILLER]
      ,[REPORT_DATE])
      VALUES (
      NEWID(),@Card,‘840‘,10.00,61.68,‘05999‘,‘5‘,‘2019-01-09 00:00:00.000‘,
      ‘084352‘,‘840‘,‘000000000009‘,‘20190109‘,‘084352‘,‘0000009‘,‘00000009685‘,
      ‘00000000000‘,54928.32,‘0005591390000622638‘,‘000000‘,‘053‘,‘M‘,‘8120‘,
      ‘Ecom01                 St. Louis     MO‘,‘‘,‘5‘,‘794416‘,‘‘,‘‘,@datenow
      );
      select @[email protected]+1;
      end
END
GO

在这里面我要提醒一下这个几个地方,参数设置可以在这个截图的位置上添加。设置值与declare(申明)是一样的,@id int这样就申明了一个为int类型的@id值。然后设置则用select关键字,在sql语句中用set关键字,但存储过程中我使用set是没有用的。 SET NOCOUNT ON;这句话则是为了取消执行多条执行语句返回的结果集,否则每次都返回一句“执行一条数据成功”是很浪费时间的。while或是if语句都是没有大括号来包含内容,因此这些语句都一样用begin和end来包含。

一个字符串想用一些字符来代替长度不够的部分,则可以使用RIGHT(‘00000000000‘+CAST(@i as varchar),11);语句,这里我是以总长度为11个字符进行设置的,cast则将int值转化为varchar值。

如果相对一个时间进行添加一天则可用这句话DATEADD(DAY,1,@datenow);第一个参数其实是指要添加的位置,day表示是要在时间的天数上加数值。最后一个参数则是目标值。

好了,其他的模式就没有什么可以多说的,这个存储过程写得不复杂,大家一看就明了了。现在就来讲讲要执行这个存储过程需要执行哪句话,为什么创建或是更新执行的时候是不执行存储过程的?

要想执行该存储过程我们可以执行exec AddSrcCCAUTH(存储数据表),执行这句话存储过程文件中的语句才被执行。如果停止不了,然后你不知道怎么停止则可以使用kill 56(这个是spid值)

如果你找不到该值则可以查询

SELECT t.[text],er.*
  FROM sys.dm_exec_requests AS er CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS t
WHERE [email protected]@SPID

执行该语句则可以查询到spid值。

其实就是截图中那个53的值,你执行的语句在哪里执行就关闭哪个查询sql。

好了最后说一下为什么创建了是不执行的,因为存储过程一般针对于一些比较复杂的,重复性较多的sql语句编写完成特定功能的SQL 语句集,如果该数据有些是比较重要的,需要客户有权限的人才能去执行,如果你一创建就执行了,那么这些数据又该由谁来负责呢?客户可能会认为有人操作而报警,而你则进入了监狱。所以在本地我们创建了会去执行查看是否正确,可将它创建到正式库里去的时候则不能执行的,也就在创建之时是不执行的,与创建视图执行是不一样的概念。

今天的日记随笔就写到这吧……

原文地址:https://www.cnblogs.com/Jack-S-Wang/p/10774636.html

时间: 2024-10-27 01:50:33

存储过程一个简单编写样式与为什么创建存储过程时不执行操作的原因的相关文章

12.创建关系时的级联操作

--- 创建关系时的级联操作 alter table student with nocheck --不检查现有数据 add constraint FK_Grade_Student_GradeId foreign key(gradeid) references grade(gradeid) on delete set null --[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] --on--在做何种操作的时候做相应的处理

SQL_编写一个简单的删除员工信息的存储过程

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/43938953 开始实验: (1).查询原始数据,使用scott用户进行试验 SQL> select  t.*,  t.rowid  from  EMP  t (2).编写存储过程并执行,如下: create  or  replace procedure  P_d

Symfony2之创建一个简单的web应用 Symfony2——创建bundle

bundle就像插件或者一个功能齐全的应用,我们在应用层上开发的应用的所有代码,包括:PHP文件.配置文件.图片.css文件.js文件等都会包含在bunde系统中. 可以通过两种方法创建bundle,一种是通过命令行创建,一种是通过手动创建相应的文件和文件夹. 一:通过命令行创建,如下: 图1 执行以上命令 src/Acme/HelloBundle 被创建,指定使用的配置文件格式yml(还可以使用xml和php),同时自动在 app/AppKernel.php 添加一行代码,使得bundle注册

关于创建数据库时的一些操作

1.创建数据库时,选项中的恢复模式 完整:允许发生错误时恢复数据库.在发生错误时,可以及时的使用事务日志恢复数据库. 大容量日志:当执行操作的数据量比较大时,只记录该操作事件,并不记录插入的细节.例如,向数据库中插入上万条记录数据,此时只记录了该插入操作,而对于每一个插入的内容并不记录.这种操作可以在执行某些操作时提高系统性能,但是当服务器出现问题的时候,只能恢复到最后一次备份的日志中的内容. 简单:每次备份数据库的时候清除事务日志,该选项表示根据最后一次对数据库的备份进行恢复. 2.常用系统存

一个简单SeekBar样式的例子

SeekBar在布局中的使用: <SeekBar android:layout_width="300px" android:layout_height="wrap_content" android:minHeight="10px"<!--定义进度条的高,不包括thumb的高--> android:maxHeight="10px"<!--定义进度条的高,不包括thumb的高--> android:t

sql创建作业实现循环执行操作

sqlserver创建作业: 1:写好需要执行的存储过程 2:新建作业: 3:设置作业信息: 4:配置好作业后,程序就自动每天执行了

创建并在项目中调用SQLSERVER存储过程的简单示例

使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC 存储过程名称 [参数列表(多个以","分隔)] AS SQL 语句 例: 引用: Create PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数 AS BEGIN -- 将uName

ROS学习随笔二(创建一个简单的ROS package)

本人在学习过程中,参见了如下几个博客及网站: ROS操作官网:http://wiki.ros.org/ROS/Tutorials 博客:http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html 以及:http://blog.csdn.net/column/details/ros-explore.html 在创建package之前,需要先创建一个工作空间,本人安装的ROS版本是Fuerte. 1.Creating a ROS WorkSpa

Android开发:如何创建一个简单的HelloWorld

HelloWorld是继搭建环境之后又需要完成的一个步骤,要创建一个简单的HelloWorld,首先创建第一个名为HelloWorld的Android项目. 通过File -> New -> Project 菜单,建立新项目"Android Project",选择一些参数 ,你可以选择你喜欢的,但是前提是你要创建相应的AVD.这里我填的是: Project name:HelloWorld Contents:选择Create new project in workspace,