.Sql 插入语句得到自动生成的递增的ID值
Insert into Table(name,des,num) values(’ltp’,’thisisbest’,10);
Select @@identity as ‘Id’
.实现1或0想显示为男或女
Select name,sex=case sex when ‘1’ then ‘男’ when ‘0’ then ‘女’ end from tablename
比较两个数取较大的数
select @maxPriority=case WHEN @otherGroupPri>@currentPri then @otherGroupPri else @currentPri end
嵌套子查询
Select a,b,c from table1 where a in (select a from table2)
.显示文章、提交人和最后回复时间
Select a.title ,a.username,b.adddate from tablename a,(select max(adddate) adddate from tablename where tablename.tile=a.title) b
.随机提取条记录的例子
Sql server:select top 10 * from tablename order by NewID();
Access:Select top 10 * from tablename order by Rnd(ID)
Rnd(ID) 其中ID是自动编号字段,可以利用其他任何数值来完成,比如姓名字段username
Select top 10 * from 表 order by rnd(len(username))
MySql:Select * from 表 order by Rnd() Limit 10
在同一表内找相同属性的记录
Select userid from accounts_users where username is not null group by userid having count(*)>1
查询类别所有产品对应的数据
Select categoryname,productname from categories left join products on categories.categoryid=products.categoryid;
日程安排提前5分钟提醒
Select * from tabschedule where datediff(minute,getdate(),开始时间) <5
得出某日期所在月份的最大天数
SELECT DAY(DATEADD(dd,-DAY('2008-02-13'),DATEADD(mm,1,'2008-02-13'))) AS 'daynumber'
Sele cxt * from tablename order by customername Collate Chinese_PRC_Stroke_ci_as //从少到多
.通配符的一些用法
1.Select * from tablename where column1 like ’[A-M]%’
选择出column字段中首字母在A-M之间的记录
2.select * from tablename where column1 like ’[ABC]%’
选择出column字段中首字母是A或B或C的记录
3.Select * from tablename where column1 like ’[A-CG]%’
选出column字段中首字母在A-C之间或者是G的记录
4. select * from tablename where column1 like ’[^C]%’
选 出column字段中首字母不是C的记录
单字符like_
Select * from tablename where column1 like ’M_crosoft’
判定数据库中是否存在某张表,与判断表中是否存在某列
IF NOT exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'tempChangeStaffNo') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
if not exists(select * from syscolumns where id =OBJECT_ID('tempChangeStaffNo') and name='Id')
索引
if exists(select name from sysindexes where name = 'suoyin')
drop index temp.suoyin ---如果存在这个名字的索引,则删除这个索引
create nonclustered index suoyin_name on temp(Name)
--创建索引时正确的,查询的时候出了问题
--(2)查询索引
select * from temp with(index=suoyin_name) where Name = 'A'
--查看temp表的索引信息
sp_helpindex temp
https://www.cnblogs.com/shy1766IT/p/4992955.html Sql Server索引
获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')
两种方式的效果相同
查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns where table_name = '表名'
SQL字段(列)操作:
增加一个列(字段):
alter table 表名 add 字段名 type not null default
Alter table table1 add username varchar() not null default ''
ALTER TABLE tempChangeStaffNo ADD Id UNIQUEIDENTIFIER NOT NULL 加主键:
Alter table tempChangeStaffNo ADD constraint PK_Id primary key (Id)
或者
alter table tempChangeStaffNo add Id UNIQUEIDENTIFIER primary key 修改列(字段)
修改字段类型:
alter table 表名 alter column 字段名 type not null
修改字段名:
alter table 表名 rename column A to B
或者:
sp_rename 'tablename.avg_grade','avg_g','column';
--tablename是表名,avg_grade是原来的列名,avg_g是新的列名
exec sp_rename 'tablename.avg_grade','avg_g','column';
返回代码值0(成功)或非零数字(失败)
eg:
下例将表 customers 中的列 contact title 重命名为 title。
EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN' 修改字段默认值
alter table 表名 add default () for 字段名 with values
如果字段有默认值,则需要先删除字段的约束,在添加新的默认值,
select c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('表名')
and b.name='字段名' 根据约束名称删除约束
alter table 表名 drop constraint 约束名 根据表名向字段中增加新的默认值
alter table 表名 add default () for 字段名 with values
eg:
ALTER TABLE Fct_Order ADD DEFAULT (()) FOR IsDisplyPrice;
select c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('Fct_Order')
and b.name='IsDisplyPrice'
alter table Fct_Order drop constraint DF__Fct_Order__IsDis__13DCE752
删除列(字段):
alter table 表名 drop column 字段名
数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同
查看硬盘分区:
EXEC master..xp_fixeddrives
比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
= (select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
查询字符串类型的字段不为空和为空
不为空的SQL
select * from TB_CMS_FLGTINFO_A t where (t.fsta is not null and t.fsta <>' ');
为空的SQL
select * from TB_CMS_FLGTINFO_A t where (t.fsta is null or t.fsta =' ');
如果字段为null则设定默认值0,避免出现警告: 聚合或其他 SET 操作消除了 Null 值
select max(isnull(id,0)) from @tab
--将筛选列表的指定数据插入另一张表,插入时某些列固定值
INSERT INTO A (a, PhotoUrl, HealthConsultTd)
SELECT
'a'
,PhotoUrl
,HealthConsultTd
FROM
(SELECT
*
FROM HEALTH_CONSULT
WHERE DOCTOR_ID = 2042) B
--一次插入多个示例数据
INSERT INTO HEALTH_CONSULT (CUSTOMER_ID, IS_AUTOSEND)
VALUES (2052, 0), (2053, 1), (2054, 3)
-- 判断数据库是否存在
if exists (select * from sys.databases where name = '数据库名')
drop database [数据库名] -- 判断表是否存在
if exists (select * from sysobjects where id = object_id(N'[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = )
drop table [表名] -- 判断存储过程是否存在
if exists (select * from sysobjects where id = object_id(N'[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = )
drop procedure [存储过程名] -- 判断临时表是否存在
if object_id('tempdb..#临时表名') is not null
drop table #临时表名 -- 判断视图是否存在 --判断是否存在'MyView52'这个试图
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = N'MyView52')
PRINT '存在'
else
PRINT '不存在'
-- 判断函数是否存在
-- 判断要创建的函数名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[函数名] -- 获取用户创建的对象信息 SELECT [name],[id],crdate FROM sysobjects where xtype='U' /*
xtype 的表示参数类型,通常包括如下这些
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
*/ -- 判断列是否存在
if exists(select * from syscolumns where id=object_id('表名') and name='列名')
alter table 表名 drop column 列名 -- 判断列是否自增列
if columnproperty(object_id('table'),'col','IsIdentity')=
print '自增列'
else
print '不是自增列' SELECT * FROM sys.columns WHERE object_id=OBJECT_ID('表名') AND is_identity= -- 判断表中是否存在索引 if exists(select * from sysindexes where id=object_id('表名') and name='索引名')
print '存在'
else
print '不存在' -- 查看数据库中对象 SELECT * FROM sys.sysobjects WHERE name='对象名' SELECT * FROM sys.sysobjects WHERE name='对象名'
--触发器-------------------------------------------------- USE AInfoLiang
GO
CREATE TRIGGER tri_t1
ON t1 --作用在那张表上(不能是多表张)
FOR INSERT ---执行添加的操作时执行下面的sql语句
AS
SELECT * FROM t1
SELECT * FROM t2 INSERT INTO t1 VALUES('','') --当对表t1进行添加数据操作时,触发器则发触发
--视图----------------------------------------------------------
USE AInfoLiang
GO
CREATE VIEW vi_v1
AS
SELECT * FROM t1 SELECT * FROM vi_v1 -- 执行视图
DROP VIEW vi_v1 --删除视图 --存储过程------------------------------------------------------
USE AInfoLiang
GO
IF(EXISTS(SELECT * FROM sys.objects WHERE NAME='proc_1'))
DROP PROCEDURE proc_1
GO
CREATE PROCEDURE proc_1
AS
SELECT * FROM t1
GO
EXEC proc_1 --执行存储过程
DROP PROCEDURE proc_1 --删除存储过程 --带参的存储过程
USE AInfoLiang
GO
CREATE PROCEDURE proc_2(@start int,@end int)
AS
SELECT * FROM t1 WHERE loginid BETWEEN @start AND @end EXEC proc_2
@start = , -- int
@end = -- int
<br>
--带通配符的存储过程
USE AInfoLiang
GO
ALTER PROCEDURE proc_3
(
@name VARCHAR()='%j%'
)
AS
SELECT * FROM t1 WHERE loginname LIKE @name EXEC proc_3
@name = '%1%' -- VARCHAR() --执行带通配符的存储过程 --带输出参数存储过程---------------------------------------------
USE AInfoLiang
GO
CREATE PROCEDURE proc_4
(
@loginid INT,
@loginname VARCHAR() OUT,
@loginpwd VARCHAR() OUTPUT
)
AS
SELECT * FROM t1 WHERE loginid=@loginid AND loginname=@loginname AND loginpwd=@loginpwd DECLARE @loginid= INT,@loginname VARCHAR(),@loginpwd VARCHAR()
SELECT @loginid=;
set @loginname = '';
SELECT @loginpwd = ''; EXEC proc_4 @loginid,@loginname OUT ,@loginpwd OUTPUT
SELECT @loginname AS dd,@loginpwd AS ddd --分页------------------------------------------------------
USE AInfoLiang
GO
CREATE PROCEDURE proc_5
(
@start INT ,
@end INT
)
AS
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY loginid ) AS rowid,* FROM t1
) AS temp
WHERE temp.rowid BETWEEN @start AND @end EXEC proc_5
@start = , -- INT
@end = -- INT --分页2---------------------------------------- USE AInfoLiang
GO
CREATE PROCEDURE proc_fen2
(
@pageindex INT,--起始页
@pagesize INT -- 一页多少个
)
AS DECLARE @startrow INT ,@endrow INT
SET @startrow=(@pageindex-)* @pagesize + --得到 从那一行的数据开始
SET @endrow =@startrow+@pagesize- --得到 结束的行那一条数据
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY loginid) rowid,* FROM t1
) temp
WHERE temp.rowid BETWEEN @startrow AND @endrow EXEC proc_fen2
@pageindex = , -- INT
@pagesize = -- INT ---自定义函数
--定义函数分为二种,一种是标量值函数,另一种是表格值函数
--表格函数又可分为内联表格值函数和多句表格值函数 -- 标量函数
USE AInfoLiang
GO
IF(EXISTS(SELECT * FROM sys.objects WHERE TYPE='fn' AND NAME='fun_1'))
BEGIN
DROP FUNCTION fun_1
END
GO
CREATE FUNCTION fun_1
(
@loginid INT
)
RETURNS VARCHAR() --返回值类型
AS
BEGIN
DECLARE @loginname VARCHAR ()
SELECT @loginname=loginname FROM t1 WHERE loginid=@loginid
RETURN @loginname
END SELECT dbo.fun_1() --执行函数 --表格值(内联函数)---------------------------------------------- USE AInfoLiang
GO
IF(EXISTS(SELECT * FROM sys.objects WHERE TYPE='fn' AND NAME='fun_3'))
BEGIN
DROP FUNCTION fun_3
END
GO
CREATE FUNCTION fun_3
(
@loginid INT
)
RETURNS TABLE
AS
RETURN (SELECT * FROM t1 WHERE loginid=@loginid) SELECT dbo.fun_2() --表格值(多语句函数)--------------------------------------------------
USE AInfoLiang
GO
IF(EXISTS(SELECT * FROM sys.objects WHERE NAME ='fun_4'))
DROP FUNCTION fun_4
GO
CREATE FUNCTION fun_4
(
@loginid INT
)
RETURNS @t1 TABLE(a VARCHAR(),b VARCHAR ())
AS
BEGIN
INSERT @t1
SELECT loginname ,loginpwd FROM dbo.t1 WHERE loginid=@loginid
RETURN
END SELECT dbo.fun_4()
----添加IDENTITY列
alter table tablename add id int identity(,)
----设置IDENTITY列为主键
alter table tablename add constraint [PK_tablename] PRIMARY KEY CLUSTERED ([id]) --添加主键
ALTER TABLE ForbiddenType ADD CONSTRAINT [PK_ForbiddenType] PRIMARY KEY
CLUSTERED([Id]) --修改主键
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[主键名]') and OBJECTPROPERTY(object_id(N'[列名]'), N'IsPrimaryKey') = )
ALTER TABLE 表名 DROP CONSTRAINT [主键名]
ALTER TABLE 表名 ADD CONSTRAINT [新主键名] PRIMARY KEY ([列名]) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PK_orders]') and OBJECTPROPERTY(OBJECT_ID(N'dbo.[orders].[pi_no]'), N'IsPrimaryKey') = )
ALTER TABLE orders DROP CONSTRAINT [PK_orders]
ALTER TABLE orders ADD CONSTRAINT [PK_orders] PRIMARY KEY ([form_no]) ON [PRIMARY]
设置bit类型字段
[IsPublic] [BIT] NOT NULL DEFAULT ((1))
[LearningAbility] [DECIMAL](19, 5) NULL, --五位小数
[BaseSalary] [DECIMAL](18, 2) NULL, --二位小数
https://www.cnblogs.com/shy1766IT/p/5267797.html 获取、增加、修改、删除sqlserver字段描述及快速查看表字段与描述