mssql数据库中的表、字段sql语句

by admin on 2019年11月6日

转自: 

前几天查资料查到7年前本身写的blog,被英特网转发了几11遍,却没三个把自个儿的原著链接标志出来,渺视一下。

转自:http://www.maomao365.com/?p=7205

mssql update from 语法

芸芸众生,通常在mysql过滤相仿记录时常用的严重性字是distinct, group
by等主要字,然而怎么过滤七个不一样的字段相通的笔录呢。

摘要:

下文叙述sql脚本中过滤百分号的方法:


实验境遇:sql server 2009 帕杰罗2 

找了半天才找到原贴:http://huxiao.iteye.com/blog/629030

摘要:

复制代码 代码如下:

以下是难题供给:


好似大家一贯用的*和?,sql的like语句中,使用%和_来代表专断五个字符和三个字符

下文分享两条sql求和本子,再次求和的措施共享

update a set a.columnname=b.columnname from a,b where b.id=1

有一张表chat_history中设有字段id,from_uid,to_uid等字段,其中id为自增id,from_uid为音讯的发送方的uid,to_uid为选择方的uid,今后要求拿到某三个uid的流行联系人。

百分号:在sql脚本编写中“百分号”被节制为意气风发种通配符,那么只要我们需寻找数据中是还是不是留存百分号时,需选择何种方法吗?
下文通超过实际例的章程解析百分号的合营格局。
 

# %代表任意多个字符  
select * from user where username like '%huxiao';    
select * from user where username like 'huxiao%';    
select * from user where username like '%huxiao%';  

# %代表一个字符  
select * from user where username like '_';    
select * from user where username like '______';    
select * from user where username like 'huxia_';    
select * from user where username like 'h_xiao';  
 /*
     例:
       下文已知两条sql求和脚本,现需对两张不同表的求和记录再次求和   
     */  
     ---对两条求和sql脚本求和的方法
      select sum(q) from 
      (
       select sum(qty)  as q from tableNameA where ...
       union all 
        select sum(qty)  as q from tableNameB where ...
       ) as table

     ---对多条求和sql脚本,再次求和的方法分享
     select sum(q) from 
      (
       select sum(qty)  as q from tableNameA where ...
       union all 
        select sum(qty)  as q from tableNameB where ...
         union all 
        select sum(qty)  as q from tableNameC where ...
        union all 
        select sum(qty)  as q from tableNameD where ...
       ...  
    ) as table

1.系统表sysobjects

率先的率先个主见就是对from_uid,to_uid进行group
by操作然后收获max(id)过滤出from_uid或者to_uid等于指标uid的值。

1        ---在sql server中,如果需要检索百分号是否存在数据中,我们使用以下方法:
2       ---方法1:中括号括起百分号进行过滤操作
3            select * from tableName where [列名]  like '%[%]%'  ---采用中括号括起百分号
4       ---方法2.1:  采用escape指定匹配条件中转义字符为~,对百分号进行转义查询
5        select *,'1.2' as [例2] from tableName where [列名]  like '%~%%'   escape '~' 
6         ---2.2采用escape指定匹配条件中转义字符为t,对百分号进行转义查询
7        select *,'1.3' as [例3] from tableName where [列名]  like '%t%%'   escape 't'
8  

倘使本身就着实要查%或许,怎么做吧?使用escape,转义字符后边的%或就不作为通配符了,注意日前未有转义字符的%和_如故起通配符效用

 

在数据库中开创的各种对象(举例限制、暗许值、日志、准绳以致存款和储蓄进程卡塔尔国都对应豆蔻梢头行。

依据这种主见大家得以获得如下的sql语句

 

select username from gg_user where username like '%xiao/_%' escape '/';  
select username from gg_user where username like '%xiao/%%' escape '/';  
列名 数据类型 说明

name

sysname

对象名

id

int

对象标识号

xtype

char(2)

对象类型。可以是以下对象类型之一:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数

IF = 内联表函数

IT = 内部表

P = 存储过程

PC = 程序集 (CLR) 存储过程

PK = PRIMARY KEY 约束(类型为 K)

RF = 复制筛选存储过程

S = 系统表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = 表函数

TR = SQL DML 触发器

TT = 表类型

U = 用户表

UQ = UNIQUE 约束(类型为 K)

V = 视图

X = 扩展存储过程

uid

smallint

对象所有者的架构 ID。

对于从旧版 SQL Server 升级的数据库,架构 ID 等于所有者的用户 ID。

重要提示:
如果使用以下任何一个 SQL Server DDL 语句,则必须使用 sys.objects 目录视图而不是 sys.sysobjects。 CREATE | ALTER | DROP USER CREATE | ALTER | DROP ROLE CREATE | ALTER | DROP APPLICATION ROLE CREATE SCHEMA ALTER AUTHORIZATION ON OBJECT

 

如果用户数和角色数超过 32,767,则发生溢出或返回 NULL。

有关详细信息,请参阅查询 SQL Server 系统目录

info

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

status

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

base_schema_ver

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

replinfo

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

parent_obj

int

父对象的对象标识号。例如,表 ID(如果父对象是触发器或约束)。

crdate

datetime

对象的创建日期。

ftcatid

smallint

注册为使用全文索引的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。

schema_ver

int

在每次更改表的架构时都会增加的版本号。始终返回 0。

stats_schema_ver

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

type

char(2)

对象类型。可以是下列值之一:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

FN = 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数 IF = 内联表函数

IT – 内部表

K = PRIMARY KEY 或 UNIQUE 约束

L = 日志

P = 存储过程

PC = 程序集 (CLR) 存储过程

R = 规则

RF = 复制筛选存储过程

S = 系统表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = 表函数

TR = SQL DML 触发器

TT = 表类型

U = 用户表

V = 视图

X = 扩展存储过程

userstat

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

sysstat

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

indexdel

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

refdate

datetime

标识为仅供参考。不提供支持。不保证以后的兼容性。

version

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

deltrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

instrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

updtrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

seltrig

int

标识为仅供参考。不提供支持。不保证以后的兼容性。

category

int

用于发布、约束和标识。

cache

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

select max(id) as mid,from_uid,to_uid from chat_history where from_uid="xxxxxx" or to_uid = "xxxxxx" group by from_uid, to_uid order by mid. 

参考 sys.sysobjects
(Transact-SQL)

这会儿我们查阅结果能够很刚强的觉察七个主题材料,假若七个相互符信的uid1和uid2,大家由此地方的sql语句获取到两条数据from_uid=uid1,to_uid=uid2和from_uid=uid2,to_uid=uid1。当然那亦非主题材料,数据我们曾经查到了,大家得以透进程序再对结果实行叁遍联合,我们就足以拿走大家期待获得的数码。

 

在最近关系少之甚少的情景下,上述的管理方式并从未什么样不对路的地点,可是当前段时间联系人超多时,我们或许会想到利用分页对列表页进行分页。然而上述的做法很理解就早就达不到我们的意料了,大家期望将其构成到一条sql语句中,何况能够行使limit关键字。

2.syscolumns

通过观望,我们期望过滤诸如from_uid=uid1,to_uid=uid2和from_uid=uid2,to_uid=uid1那样的笔录,第一反应就是大家能够在上述的sql语句作为有时表,再在外层加sql语句实行拍卖,当然这种措施从逻辑上是起家的,但是他是以献身作用来落到实处的,博主个人是相比较反感使用中间表的。

为各种表和视图中的每列重回生龙活虎行,并为数据库中的存储进程的每一个参数重临一行。

通过对上述结果的观赛,大家得以获取如此意气风发种消息,uid1,uid2是否足以视作二个字段实行管理吧,在mysql中设有首要子concat那是对多少个字段张开归并操作,不过轻易的concat(from_uid,to_uid)依然达不到大家期待的结果,可是mysql提供了逻辑运算,case
操作。

列名 数据类型 说明

name

sysname

列名或过程参数的名称。

id

int

此列所属表的对象 ID,或者与此参数关联的存储过程的 ID。

xtype

tinyint

sys.types 中的物理存储类型。

typestat

tinyint

标识为仅供参考。不提供支持。不保证以后的兼容性。

xusertype

smallint

扩展的用户定义数据类型的 ID。如果数据类型的数字超过 32,767,则溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录

length

smallint

sys.types 中的最大物理存储长度。

xprec

tinyint

标识为仅供参考。不提供支持。不保证以后的兼容性。

xscale

tinyint

标识为仅供参考。不提供支持。不保证以后的兼容性。

colid

smallint

列 ID 或参数 ID。

xoffset

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

bitpos

tinyint

标识为仅供参考。不提供支持。不保证以后的兼容性。

reserved

tinyint

标识为仅供参考。不提供支持。不保证以后的兼容性。

colstat

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

cdefault

int

此列的默认值的 ID。

domain

int

此列的规则或 CHECK 约束的 ID。

number

smallint

过程分组时的子过程号。

0 = 非过程项

colorder

smallint

标识为仅供参考。不提供支持。不保证以后的兼容性。

autoval

varbinary(8000)

标识为仅供参考。不提供支持。不保证以后的兼容性。

offset

smallint

此列所在行的偏移量。

collationid

int

列的排序规则的 ID。对于非字符列,此值为 NULL。

status

tinyint

用于说明列或参数的属性的位图:

0x08 = 列允许空值。

0x10 = 添加 varcharvarbinary 列时,执行 ANSI 填充。保留 varchar 列的尾随空格以及 varbinary 列的尾随零。

0x40 = 参数为 OUTPUT 参数。

0x80 = 列为标识列。

type

tinyint

sys.types 中的物理存储类型。

usertype

smallint

sys.types 中的用户定义数据类型的 ID。如果数据类型数超过 32767,则会发生溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录

printfmt

varchar(255)

标识为仅供参考。不提供支持。不保证以后的兼容性。

prec

smallint

此列的精度级别。

-1 = xml 或大值类型。

scale

int

此列的小数位数。

NULL = 数据类型不是数值。

iscomputed

int

指示列是否为计算列的标志:

0 = 非计算列。

1 = 计算列。

isoutparam

int

指示过程参数是否为输出参数:

1 = True

0 = False

isnullable

int

指示列是否允许空值:

1 = True

0 = False

collation

sysname

列的排序规则的名称。如果不是基于字符的列,则为 NULL。

能够将上述sql语句校正如下:

参考 sys.syscolumns
(Transact-SQL)

SELECT max( id ) AS mid, from_uid, to_uid, 
        CASE to_uid
        WHEN 'xxx'
 THEN concat( to_uid, from_uid )
 ELSE concat( from_uid, to_uid )
 END AS to_from_uid
FROM chat_history
WHERE to_uid = 'xxx' OR from_uid = 'xxx'
GROUP BY to_from_uid
ORDER BY mid DESC
LIMIT 0,20

 

,
group by等根本字,不过怎么过滤八个分歧的字段相通的记录呢。
以下是主题材料需…

删去某数据库内的表

declare dlist cursor for
 select   name   from   sysobjects   where xtype=’U’
 open dlist
declare @n varchar(4000)
fetch next from dlist into @n
while @@fetch_status=0
 begin
        declare @es varchar(4000)
        set @es=’DROP table 
‘+@n
         exec( @es)  
  fetch next from dlist into @n
 end
close dlist
DEALLOCATE dlist

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图