• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > sqlserver 脚本和批处理指令小结

sqlserver 脚本和批处理指令小结

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了脚本,批处理等相关知识,希望本文的分享对您有所帮助

sqlserver 脚本和批处理指令小结,学习sqlserver的朋友可以收藏下

一.脚本基础
1.USE语句
设置当前数据库。
2.声明变量
语法:DECLARE @变量名 变量类型
在声明变量后,给变量赋值之前,变量的值为NULL。
将系统函数赋给声明的变量,这个方法可以使我们能更安全地使用值,该值只有人为地改变时它才变动。如果直接使用系统函数本身,那么当它发生变动时,有
时会无法确定其究竟为何,因为大多数系统函数值是由系统确定的。这容易在你不预期的情况下导致系统改变了值,引起不可预期的后果。
(1).给变量赋值
SET:当进行变量赋值是,该值已经知道是确切值或者是其他变量时,使用SET。
SELECT:当变量赋值基于一个查询时,使用SELECT。
(2).系统函数
SQL Server 2005中有30多个无参的系统函数,其中一些最重要的如下:
@@ERROR: 返回当前连接下,最后执行的T-SQL语句的错误代码,如无错误返回0。
@@FETCH_STATUS: 和FETCH语句配合使用。
@@IDENTITY: 返回最后一句运行语句的、自动生成的标识值,作为最后INSERT或者SELECT INTO语句的结果。
@@ROWCOUNT: 返回最后一个语句影响的行数。
@@SERVERNAME: 返回脚本正在其上运行的本地服务的名字。
@@TRANCOUNT: 返回活动事务的数量,特别是针对当前连接的事务的瓶颈程度。

二.
(1).GO单独占一行。在同一行上,T-SQL语句不能在GO语句之前。
(2).所有语句从脚本开始处或者上一个GO语句开始编译,直到下一个GO语句或者脚本结束,将这段代码编译到一个执行计划中并相互独立地送往服务器。前一
个执行计划中发生错误,不会影响后一个执行计划。
(3).GO不是一个T-SQL命令,只是被编辑工具识别的命令。当编辑工具碰到GO,它把GO看做一个结束的标记,将其打包,然后作为一个独立单元发送到
服务器——不包括GO,服务器对于GO没有任何概念。
1.中的错误
语法错误,运行时错误。
2.何时使用
(1).独自成的语句
有几个命令必须独自成,它们包括:
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
CREATE TRIGGER
CREATE VIEW
如果想将这些语句中的任何一条和其他语句组成单独的一个脚本,那么需要采用一个GO语句将它们分别断开,归入各自的中。
(2).使用建立优先级
使用最可靠的例子是,当需要考虑语句执行的优先顺序时,也就是说,需要一个任务在另一个任务开始前执行。
例如:
CREATE DATABASE Test
代码如下:
CREATE TABLE TestTable
(
col1 INT,
col2 INT
)

执行语句,会发现生成的表没有在Test数据库中,而是在master数据库中(如果当前使用的数据库是系统数据库)。因为在执行脚本的时候,使用的数据
库是系统数据库,该数据库是当前的,所以生成的表在系统数据库中。看起来,应该在创建表之前指定数据库Test。然而,这样仍然存在问题。解析器试图校
验代码,发现我们用USE命令引用的数据库并不存在。原因在于创建数据库的语句和创建表的语句写在一个中,在执行该脚本之前,当然数据库还没有
创建。根据的要求,我们将创建数据库和创建表的脚本用GO语句分为两个独立的。正确代码如下:
代码如下:
CREATE DATABASE Test
GO

USE Test
CREATE TABLE TestTable
(
col1 INT,
col2 INT
)

三.动态SQL:使用EXE命令生成代码
语法:EXEC/EXECUTE ({<字符串变量> | '<字面值命令字符串>'})
1.EXEC的作用域
真正的调用EXEC语句的行,拥有同该EXEC语句正在运行的批或过程中的其他代码相同的作用域。但是作为EXEC语句结果而被执行的代码,被认为是在它自
己的批中。
例如:
DECLARE @OutVar VARCHAR(50)
EXEC ('SELECT @OutVar = FirstName FROM Contact WHERE ContactID = 1')
这里系统会报错,指出必须声明变量@OutVar。因为EXEC的语句独自成为一个,其中的变量不能和其外的作用域相沟通,只在这个中有效。此
时,@OutVar的值为NULL。正确的写法如下:
EXEC ('DECLARE @OutVar VARCHAR(50)
SELECT @OutVar = FirstName FROM Contact WHERE ContactID = 1')
这里,我们看到两中不同的作用域,这两种作用域间不能相互沟通。如果不采用外部机制,比如一个临时表,我们就没有办法实现在内部作用域和外部作用域
之间传递信息。有一个例外的事情是可以在EXEC的区域内部出现,并且也能在EXEC执行后被看到,这就是系统函数。因此,像@@ROWCOUNT这样的变量仍然
能够被使用。
2.安全上下文和EXEC
当赋予某人权利运行一个存储过程,意味着他也能获得权利去执行存储过程内部的动作。比如,有一个存储过程用来列出去年内所有的雇佣员工。其中有权限
执行该存储过程的人,才能够执行并返回结果——即使他没有权限直接访问人力资源的员工表。
这样隐含权限对于EXEC语句是无效的。在默认情况下,任何在一个EXEC语句内部建立的参照,都将在当前用户的安全上下文中运行。因此,我们有权利去访
问一个叫spNewEmployee的存储过程,但是却没有权利去访问员工表。如果spNewEmployee通过一个简单的SELECT语句获得值,那么一切正常。但是如果
pNewEmployee使用EXEC语句去执行一个SELECT语句,这个EXEC语句将失败——因为没有权利访问员工表。
3.用户自定义函数和EXEC关联
不能在同一个语句中同时运行一个函数和EXEC语句。例如:
DECLARE @Num INT
SET @Num = 3
EXEC ('SELECT LEFT(LastName, ' + CAST(@Num AS VARCHAR) + ') AS FilingName FROM Contact')
这个语句会返回一个错误消息,因为CAST函数需要在EXEC所在行之前被解析。正确代码如下:
DECLARE @Num INT
DECLARE @str VARCHAR(255)
SET @Num = 3
SET @str = 'SELECT LEFT(LastName, ' + CAST(@Num AS VARCHAR) + ') AS FilingName FROM Contact'
EXEC (@str)
这个例子工作正常,因为EXEC的输入值已经是一个完整的字符串。
4.EXEC和用户自定义函数
一般来说,不允许用户自定义函数内部使用EXEC去运行动态SQL,但是,使用EXEC运行一个存储过程,少数情况是合法的。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql常用监控脚本命令整理
  • mysql自动增量备份的实例方法(本地备份与远程备份)
  • mysql xtrabackup 备份恢复实现分享
  • mysql 初始执行文件的使用介绍
  • MySQL数据库备份和还原的常用命令小结
  • Mysql自动备份与还原方法
  • MySQL数据库备份与恢复方法
  • linux下mysql自动备份脚本代码
  • mysql 数据库备份和还原方法集锦 推荐
  • 常用的几个mysql监控脚本命令

相关文章

  • 2018-12-05怎样写出高性能的SQL查询语句
  • 2018-12-05解析MySQL数据库中外键约束
  • 2018-12-05PL/SQL 日期时间类型函数及运算
  • 2018-12-05mysql常用基础操作语法(十)~~子查询【命令行模式】
  • 2018-12-05MSSQL 基本语法及实例操作语句
  • 2018-12-05MySQL字符函数的详细介绍
  • 2018-12-05MySQL之-日期时间Extract函数代码示例详细介绍
  • 2017-05-11MySQL无GROUP BY直接HAVING返回空的问题分析
  • 2018-12-05sql2005 存储过程分页代码
  • 2018-12-05MySQL JOIN之完全用法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL用户权限管理图文详解
    • 麦子学院深入浅出 redis 视频资料分享
    • MySQL单表ibd文件恢复方法详解
    • sql 函数大全 比较常用的一些函数整理第1/2页
    • MySQL InnoDB和MyISAM数据引擎的差别分析
    • mysql其他函数
    • mysql数据库优化必会的几个参数中文解释
    • 什么是mysql集群?介绍mysql的集群
    • ORACLE 正则解决初使化数据格式不一致
    • mysql 主从服务器的简单配置

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有