zoukankan      html  css  js  c++  java
  • SQL大全(查询分析器快捷鍵,Sysproperties系统表,syscolumns系统表,union,表结构修改,临时表,加一个自动增长列,函数,游标,关联其它表修改,直接调用存储过程,T远程连接专用sql)

    查询分析器快捷鍵

    Ctrl-Shift-C:注释

    Ctrl-Shift-R:移除注释

    多行注释的时候很管用。不用光标移来移去定位首尾,然后用/*   */了。

    Ctrl-Shift-L:转为小写

    Ctrl-Shift-U:转为大写

    Sysproperties系统表

    这个表是存储列描述的

    当用表设计器设计表的时候可以添加所谓的描述说明,这个表就是拿来存储这些信息的。

    如果表没有信息是因为表定义都没有添加过描述说明,可以换个库看看,比如master数据库;或者手动添加1,2个字段的说明,就可以查到纪录

    syscolumns系统表

    COLUMNPROPERTY(id, Name,'IsIdentity')方法可能只对syscolumns表有用,而且前面两个参数是固定的

    根据数据库的数字类型长度计算出它的最大长度

    以int为例:

    一个字节是8位,所以最少是8位,INT是4个字节,所以是32位,这32位指的是二进制的。32位的最大二进制是11111……一直到32位 所以INT的最大值应该是231+230 +……+21+20=232

    结合两条查询的记录 union

    (第一个select 后跟的列数应该和第二个select后的列数相同)

    方法一:

    select distinct ' ',' ' from CUR_EMS3_IMG

    (在原数据前插入一条空的记录 如果去掉distinct结果将插入与原数据记录行数相同的记录)

    union all

    select id,g_name from CUR_EMS3_IMG

    方法二:

    select ' ',' ' from CUR_EMS3_IMG   (在原数据前插入一条空的记录)

    union

    select id,g_name from CUR_EMS3_IMG

    方法三:

    select ' ',' '   (在原数据前插入一条空的记录)

    union

    select id,g_name from CUR_EMS3_IMG

    在查询分析器中给表加一列(加字段)

    Alter   table   表名   add   新增字段名  字段类型

    把数据插入到临时表。

    select   *   into   临时表名  from  数据源

    向临时表中加一个自动增长列

    select identity(int,1,1) s,* into  #test from test

     

    函数

    ISNULL

    Isnull(列名,替换的值);

    用法:select id,isnull(name,’测试’) form test;

    用法二:如果想查出name 是为空值的记录,只能用这种方法select * from test where isnull(name,’ ’)=’ ’;

    CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置

    CHARINDEX函数调用方法如下:

    CHARINDEX ( expression1 , expression2 [ , start_location ] )

    例:CHARINDEX(‘,’,test)在test字段中查询有没有逗号

    Expression1是要到expression2中寻找的字符口串,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

    Substring:截取字段

    substring(Entry_ID,9,1) 第一个参数是字段,第二个参数从第几位开始截取,第三个是截取多少位。

    ISNUMERIC()判断是否为数值

    ISNUMERIC(Entry_ID)

     

    替换回车

    select replace(testID,char(13)+char(10),'') testID,* from test

    行到最后一次指定字符的位置

    PATINDEX('%,%', @new_list_no) --得到第一次出现','的位置

    datalength(isnull(G_NAME,''))    检查汉字和字符的长度(汉字为两个字符字母为单字符)

     

    游标

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

    一、 游标种类

    MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标。

    (1) Transact_SQL 游标

         Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。

    (2) API 游标

         API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。

    (3) 客户游标

         客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL 语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。

         由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。在本章中我们主要讲述服务器(后台)游标。

    二、 游标操作

    使用游标有四种基本的步骤:声明游标、打开游标、提取数据、关闭游标。

    声明游标

    象使用其它类型的变量一样,使用一个游标之前,首先应当声明它。游标的声明包括两个部分:游标的名称;这个游标所用到的SQL语句。如要声明一个叫作Cus-tomerCursor的游标用以查询地址在北京的客户的姓名、帐号及其余额,您可以编写如下代码:

    例1:

    DECLARE CustomerCursor CURSOR FOR

    SELECT acct_no,name,balance

    FROM customer

    WHERE province="北京";

     

     

     

     

     

     

    例2:

    --清除所有记录

    truncate table info

    declare @i int

    set @i=1

    while @i<1000000

    begin

    insert into info values('Justin'+str(@i),'深圳'+str(@i))

    set @i=@i+1

    end

    例3:

    declare @EntID varchar(18)                      --定义报关单号

    declare @ListID varchar(36)                     --定义清单唯一号

    declare curEnt cursor FOR                       --定义游标

    SELECT AVS_ENTRY_HEAD.ENTRY_ID, AVS_SUBBILL_HEAD.ID FROM AVS_ENTRY_HEAD INNER JOIN AVS_SUBBILL_HEAD ON              AVS_ENTRY_HEAD.SEQ_NO = AVS_SUBBILL_HEAD.LIST_NO

        open curEnt                                     --打开游标

    FETCH NEXT FROM curEnt into @EntID,@ListID    

        WHILE @@FETCH_STATUS = 0             --固定写法

        BEGIN

             update AVS_SUBBILL_HEAD set ENT_NO=@EntID where [ID]=@ListID --更新数据

             FETCH NEXT FROM curEnt into @EntID,@ListID

        END

        CLOSE curEnt                --关闭游标

        DEALLOCATE curEnt

     

    在游标的声明中有一点值得注意的是,如同其它变量的声明一样,声明游标的这一段代码行是不执行的,您不能将debug时的断点设在这一代码行上,也不能用IF...END IF语句来声明两个同名的游标,如下列的代码就是错误的。

    IF Is_prov="北京"THEN

    DECLARE CustomerCursor CURSOR FOR

    SELECT acct_no,name,balance

    FROM customer

    WHERE province="北京";

    ELSE

    DECLARE CustomerCursor CURSOR FOR

    SELECT acct_no,name,balance

    FROM customer

    WHERE province〈〉"北京";

    三表连接:

    Student 学生表

    Subject 成绩对应的ID

    Grade  成绩表

    select s.stuid,s.name,b.subjectName,g.grade from student s left join grade g on s.stuid=g.stuid left join subject b on g.subjectId=b.subjectId

     

    newid()获取唯一ID

    getdate()获取当前时间

    substring()截取字符

    新增字段:

    alter   table   表名   add   字段   数据类型

    修改表字段数据类型:

    alter table TMP_TR_IMG

    alter column G_NAME varchar(200) 

    修改字段名

    exec    sp_rename   '表名.旧列名','新列名'

    删除字段

    alter   table   CIQ_Company   drop   column  LimitGood

    增加默认值

    alter table OUT_APPLY_BILL_HEAD add  default (getdate()) for insertDatetime

    关联其它表修改

    UPDATE TMP_DCR_Import_Export_Gather

    SET FLAG=1,REMARK='项号必须存在于归并后料件中'

    FROM TMP_DCR_Import_Export_Gather A LEFT JOIN CUR_EMS3_IMG B

    ON A.EMS_NO = B.EMS_NO

    AND convert(int,A.G_NO) = B.G_NO

    WHERE A.G_MARK='3' AND A.FLAG = 0

    AND B.COP_G_NO IS NULL

    加主键(组合键的话就直接在括号里加多列)

    ALTER TABLE CompInfo ADD PRIMARY KEY (列名)

     

    存储过程加传出参数时直接给个空字符。

    exec THEORY_RESULT_VIEW_TMP_CHK  'K23275E00001', '3', 'K23275E00001_1',''

     

    SET  IDENTITY_INSERT  (当表有自动增长行时不可插入)

    允许将显式值插入表的标识列中。 

    语法

     SET  IDENTITY_INSERT  [  database.[  owner.]  ]  { table  }  { ON | OFF }

     参数 

     database  是指定的表所驻留的数据库名称。

     Owner

     是表所有者的名称。

     table

     是含有标识列的表名。

    让日期只显示年月日。

    SELECT convert(varchar(10),D_DATE,120) from COMP_ENTRY_HEAD

     

     

     

    T人专用sql(把远程登录的人T掉 此sql必须连上你要远程连接的那台机器执行,如要连接A机器,就连A的sql T人)

    xp_cmdshell 'query user'

    xp_cmdshell 'logoff 1'

     

    修改一个表的值是从另一个表取的

    update A set A.ENT_NO=B.ENTRY_ID

    FROM B  INNER JOIN A  ON

    B.SEQ_NO = A.LIST_NO

  • 相关阅读:
    【SPI】浅谈JDK中SPI技术
    【MySQL8.0.18】阿里云服务器上搭建MySQL数据库
    【JDK13】阿里云服务器安装JDK13
    小型个人博客搭建之数据库设计
    【算法题】CCF CSP第三题练习(更新中)
    【算法题】CCF CSP第一题练习
    【嵌入式】KEIL4和KEIL5合并
    【ROS】安装ubuntu18.04+ros-melodic
    Notepad++配置python之NppExec
    vi一般指令命令行
  • 原文地址:https://www.cnblogs.com/xbding/p/SQL_ALL.html
Copyright © 2011-2022 走看看