当前位置:首页 » 编程语言 » sqlif三目

sqlif三目

发布时间: 2023-06-19 11:21:01

㈠ 在sql存储过程的一般语法是什么

1、 创建语法

createproc|procerepro_name

[{@参数数据类型}[=默认值][output],

{@参数数据类型}[=默认值][output],

....

]

as

SQL_statements

2、 创建不带参数存储过程

--创建存储过程

if(exists(select*fromsys.objectswherename='proc_get_student'))

dropprocproc_get_student

go

createprocproc_get_student

as

select*fromstudent;

--调用、执行存储过程

execproc_get_student;

3、 修改存储过程

--修改存储过程

alterprocproc_get_student

as

select*fromstudent;

4、 带参存储过程

--带参存储过程

if(object_id('proc_find_stu','P')isnotnull)

dropprocproc_find_stu

go

createprocproc_find_stu(@startIdint,@endIdint)

as

select*fromstudentwhereidbetween@startIdand@endId

go

execproc_find_stu2,4;

5、 带通配符参数存储过程

--带通配符参数存储过程

if(object_id('proc_findStudentByName','P')isnotnull)

dropprocproc_findStudentByName

go

createprocproc_findStudentByName(@namevarchar(20)='%j%',@nextNamevarchar(20)='%')

as

select*fromstudentwherenamelike@nameandnamelike@nextName;

go

execproc_findStudentByName;execproc_findStudentByName'%o%','t%';

(1)sqlif三目扩展阅读:

SQL存储过程优点:

1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

㈡ SQl常用增删改查

SQl常用增删改查模板

篇一:SQl常用增删改查

SQL常用增删改查语句

增加

现在有一张表,表(Test)里面有三个字段,分别为sno,sname,age。举例用一条增加SQL语句,插入一条数据进库。

语句:

Insert into 表名 value(‘数据1’,’数据2’,’数据3’)

具体操作: Insert into testvalues('test','test','1')

通过上面这条语句,Test表里面就多了一条数据。如下图所示:

上面这个例子,是在每条字段都需要插入的时候为了方便而直接在 into 后面跟表名。但是也会遇到一些特殊的情况,比如一张表,因为有主外键约束(我这里只有一张表),而我只想插入被约束的字段sno(主键)加上age这个字段,在 into的时候就需要指明需要插入的字段,下面举例说明:

语句:

Insert into 表名(‘字段名1’,’字段名2’) values(‘数据1’,’数据2’)

具体操作:

into test(sno,age)values('彭宇','21')

这样数据库里面,又多了一条数据,而没有插入任何数据那个字段默认为NULL。如下图所示:

删除

在我们增加数据入库的时候,难免会出现数据录入错误,或者信息过期后不再需要的数据,所以我们要利用删除语句将表里面不需要的数据删除掉。下面举例说明。

语句:

Delete from 表名 where 字段名='需要删除的数据'

具体操作:

from test where sno='test'

通过这条SQL语句,Test表主键sno字段里面数据为test的该条数据就已经被删除了。

Ps:一般来说都以主键为条件进行删除,因为主键是不可重复的,我们可以设想一下,如果没使用主键为删除条件,假设一个公司有两个叫彭宇的人。我使用sname=’彭宇’作为删除条件的话,那么这两个同名同姓人的资料都会被删除掉,所以这是不可取的。

批量删除

当有多条数据需要删除的时候,我们可以使用批量删除语句来实现一次删除多条数据。

语句:

from表名where字段名in('该字段里面的数据1','该字段里面的数据2',……)

具体操作:

首先,看一下Test表里面有多少条数据,如下图:

现在我想利用一条SQL语句,将前三条数据删除掉。

from test where sno in('test','test2','test3')

通过执行这条SQL语句后,前三条数据已经被我批量删除了。

修改

一条已经录入数据库里面的数据如果需要更新、修正,我们就需要用到SQL修改语句。

语句:

Update 表名set字段='修改后的数据' where 字段='修改条件'

具体操作:

Update test set sno='SQL修改语句' where sno='test'

修改前后比较,下图所示: (

修改前

)(修改后)

查询

上面进行了增加,修改操作后,数据库里面已经存在有数据了,最后我们要利用SQL查询语句将它们查询并显示出来。

全部查询

语句:

Select * from 表名

具体操作:

Select * from test

执行了上面这句话,那么test表里面存在的数据都会被查询出来,如果我想要单独查询出某个人的数据怎么办?很简单,只需要加上一个关键词where就能够实现了。

单条件查询

语句:

Select * from 表名 where 字段=’需要查询的数据’

具体操作:

Select * from test where sno=’彭宇’

这样我就查询出数据库里面sno字段为彭宇的数据了。

多条件查询

多条件查询就是比起单条件查询多了一个and关键词,使用多条件查询,查出来的结构能够更加的精确。

语句:

Select * from 表名 where 字段=’需要查询的数据’ and 字段=’需要查询的数据’

具体操作:

Select * from test where sno=’彭宇’’21’ and age=

篇二:SQL语句增删改查

一、删:有2中方法

1.使用删除数据某些数据

语法: from <表名> [where <删除条件>]

例: from a where name='开心朋朋'(删除表a中列值为开心朋朋的行) 注意:删除整行不是删除单个字段,所以在后面不能出现字段名

2.使用truncate table 删除整个表的数据

语法:truncate table <表名>

例:truncate table tongxunlu

注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用语有外建约束引用的表

二、改

使用update更新修改数据

语法:<表名> set <列名=更新值> [where <更新条件>]例:tongxunlu set 年龄=18 where 姓名='蓝色小名'

注意:set后面可以紧随多个数据列的更新值;where子句是可选的,用来限制条件,如果不选则整个表的所有行都被更新

四、查

1.普通查询

语法:select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]

1).查询所有数据行和列

例:select * from a

说明:查询a表中所有行和列

2).查询部分行列--条件查询

例:select i,j,k from a where f=5 说明:查询表a中f=5的所有行,并显示i,j,k3列

3).在查询中使用AS更改列名

例:select name as 姓名 from a whrer xingbie='男'

说明:查询a表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示

4).查询空行

例:select name from a where email is null

说明:查询表a中email为空的所有行,并显示name列;SQL语句中用is null或者is not null来判断是否为空行

5).在查询中使用常量

例:select name '唐山' as 地址 from a

说明:查询表a,显示name列,并添加地址列,其列值都为'唐山'

6).查询返回限制行数(关键字:top percent)

例1:select top 6 name from a

说明:查询表a,显示列name的前6行,top为关键字

例2:select top 60 percent name from a

说明:查询表a,显示列name的60%,percent为关键字

7).查询排序(关键字:order by , asc , desc)

例:select name

from a

where chengji>=60

order by desc

说明:查询表中chengji大于等于60的所有行,并按降序显示name列;默认为ASC升序

2.模糊查询

1).使用like进行模糊查询

注意:like运算副只用语字符串,所以仅与char和varchar数据类型联合使用 例:select * from a where name like '赵%'

说明:查询显示表a中,name字段第一个字为赵的记录

2).使用between在某个范围内进行查询

例:select * from a where nianling between 18 and 20

说明:查询显示表a中nianling在18到20之间的记录

3).使用in在列举值内进行查询

例:select name from a where address in ('北京','上海','唐山')

说明:查询表a中address值为北京或者上海或者唐山的记录,显示name字段3.分组查询

1).使用group by进行分组查询

例:select studentID as 学员编号,AVG(score) as 平均成绩 (注释:这里的score是列名)

from score (注释:这里的score是表名)

group by studentID

说明:在表score中查询,按strdentID字段分组,显示strdentID字段和score字段的平均值;select语句中只允许被分组的列和为每个分组返回的一个值的表达试,例如用一个列名作为参数的聚合函数

2).使用having子句进行分组筛选

例:select studentID as 学员编号,AVG(score) as 平均成绩 (注释:这里的score是列名)

from score (注释:这里的score是表名)

group by studentID

having count(score)>1

说明:接上面例子,显示分组后count(score)>1的行,由于where只能在没有分组时使用,分组后只能使用having来限制条件,

4.多表联接查询

1).内联接

①在where子句中指定联接条件

例:select a.name,b.chengji

from a,b

where a.name=b.name

说明:查询表a和表b中name字段相等的记录,并显示表a中的name字段和表b中的chengji字段

②在from子句中使用join…on

例:select a.name,b.chengji

from a inner join b

on (a.name=b.name)

说明:同上

2).外联接

①左外联接查询

例:select s.name,c.courseID,c.score

from strdents as s

left outer join score as c

on s.scode=c.strdentID

说明:在strdents表和score表中查询满足on条件的行,条件为score表的.strdentID与strdents表中的sconde相同

②右外联接查询

例:select s.name,c.courseID,c.score

from strdents as s

right outer join score as c

on s.scode=c.strdentID

说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的sconde与score表的strdentID相同

三、增:有4种方法

1.使用插入单行数据:

语法: [into] <表名> [列名] values <列值>

例: into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15')

注意:into可以省略;列名列值用逗号分开;列值用单引号因上;如果省略表名,将依次插入所有列

2.使用 select语句将现有表中的数据添加到已有的新表中

语法: into <已有的新表> <列名>

select <原表列名> from <原表名>

例: into tongxunlu ('姓名','地址','电子邮件')

select name,address,email

from Strdents

注意:into不可省略;查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致

3.使用select into语句将现有表中的数据添加到新建表中

语法:select <新建表列名> into <新建表名> from <源表名>例:select name,address,email into tongxunlu from strdents

注意:新表是在执行查询语句的时候创建的,不能够预先存在

在新表中插入标识列(关键字‘identity’):

语法:select identity (数据类型,标识种子,标识增长量) AS 列名

into 新表 from 原表名

例:select identity(int,1,1) as 标识列,dengluid,password into tongxunlu from Struents

注意:关键字‘identity’

4.使用union关键字合并数据进行插入多行

语法: <表名> <列名> select <列值> tnion select <列值>

例: Students (姓名,性别,出生日期)

select '开心朋朋','男','1980/6/15' union(union表示下一行)

select '蓝色小明','男','19**/**/**'

注意:插入的列值必须和插入的列名个数、顺序、数据类型一致

篇三:SQL常用增删改查语句

SQLSQL常用增删改查语句

作者:hiker

一. Insert 插入语句

1. Insert into 表名(列名) values (对应列名值)//插入一行.

2. Insert into 新表名(列名)

Select (列名) 旧表名

3. Select 旧表名.字段…

Into 新表名 from 旧表名

4. Select identity ( 数据类型,标识种子,标识增长量) as 列名

Into新表名

From 旧表名

5. Insert 表名(列名)

Select (对应列名值) union

Select (对应列名值) union

Select (对应列名值)

二. Update 更新语句

1. Update 表名 set 列名=’更新值’ where 更新条件

三. 删除语句

1. from 表名 where 删除条件

2. truncate table 表名 //删除表中所有行

四. select 基本查询语句

1. select 列名 from 表名 where 查询条件

order by 排序的列名asc或desc升/降

2. select 列名 as 别名 from 表名 where 查询条件

3. select 列名 from 表名 where 列名 is null //查询空值

4. select 列名 , ‘常量值’ as 别名 from 表名//查询时定义输出一列常量值

5. select top 5 列名 from 表名 //查询前5行

6. select top 5 percent 列名 from 表名 //查询前百分之5的数据行

五.

1.

2.

3.

4. select 函数查询语句 selectLEN(Class_Name)fromClass //查询class_Name字符串长度 selectupper(Class_Name)fromClass //查询class_Name并转换为大写 ltrim和rtrim //清除字符串左右空格 selectREPLACE(card_No,'0','9')fromCardRecord//修改列中字符串中的字符 列名字符串中0修改为9

5. selectSTUFF(Card_No,2,3,'8888')fromCardRecord

列名字符串中第2个开始删除3个字符,再从第二个开始插入8888字符串

6. selectGETDATE()//显示系统日期

六.

1.

2.

3.

4.

5. select 高级查询语句 select * from 表名 where列名 like ‘ %s%’ //模糊查询 select * from 表名 where 列名 between 60 and 80 //范围查询 select * from 表名 where 列名 in (‘列举’,’’,’’) //在列举范围内查询 selectSUM(Score_Num)fromscores //查询分数总和 avg max min count //查询平均分/最大数/最小数/行数

selectcourse_Id,SUM(Score_Num)fromscores

groupbyCourse_Id//分组查询

havingCourse_Id='jsj001'//分组子句筛选

七. Select 多表连接查询语句

1.selects.stu_Nameas'姓名',c.Course_nameas'科目',sc.Score_Num

fromStudentsass

innerjoinScoresasscon(sc.Stu_Id=s.Stu_ID)

innerjoinCoursesascon(sc.Course_Id=c.Course_Id)

orderbys.Stu_Namedesc //三表内联查询

2.selects.stu_Nameas'姓名',c.Course_nameas'科目',sc.Score_Num

fromStudentsass

leftouterjoinScoresasscon(sc.Stu_Id=s.Stu_ID)

leftouterjoinCoursesascon(sc.Course_Id=c.Course_Id)

//三表左外联查询,以stu表为主,其它表为从。

3.selects.stu_Nameas'姓名',c.Course_nameas'科目',sc.Score_Num

fromCoursesasc

rightouterjoinScoresasscon(sc.Course_Id=c.Course_Id)

rightouterjoinStudentsasson(sc.Stu_Id=s.Stu_ID)

//三表右外联查询,以stu右表为主,其它表为从。

八. Create 创建数据库语句

1. create database 数据库名

on[primary]

(

<数据文件参数>[,…n] [<文件参数>]

)

[log on]

(

{<日志文件参数> […n]}

)

文件参数:

Name=逻辑文件名,filename=物理文件名,size=大小,maxsize=最大容量,

Filegrowth=增长

文件组参数:

Filegroup 文件组名<文件参数>

例:

usemaster

go

ifexists(select*fromsysdatabaseswherename='abc')

dropdatabaseabc

createdatabaseabc

onprimary

(

name='abc',

filename='d:abc.mdf',

size=5,

maxsize=50,

filegrowth=10%

)

logon

(

name='abc_log',

filename='d:abc_log.ldf',

size=2,

maxsize=20,

filegrowth=1

)

2. use 数据库名

go

create table 表名

(

字段数据类型列的特征

)

Go

例:

usedb_myschool

go

ifexists(select*fromsysobjectswherename='test1')

droptabletest1

createtabletest1

(

Idintnotnull,

SNamenvar50)notnull,

Telintnotnull

)

go

3.使用SQL语句创建和删除约束

alter table表名

Add constraint 约束名约束类型描述说明

altertabledbo.testaddconstraintPK_IDprimarykey (ID)

主键:primary keyPK_ 唯一:uniqueUQ_ 检查:check CK_ 默认:defaultDF_外键:foreign keyFK_

1.execsp_addlogin'abc','abc'//添加SQL用户名

usedb_myqq

go

execsp_grantdbaccess'abc'//添加用户名到数据库中

3. 授权语句

Grant 权限 on 表名 to 数据库用户名 九. 登录验证语句

十. SQL编程语句

局部变量/全局变量

1.以@标记符作前缀

Declare @name var8)//声明

Set @name = value

Select @name=value//赋值

2.以@@标记符作前缀

@@error //最后一个T-SQL错误的错误号

@@identity //最后一次插入的标识值

@@language//当前使用的语言的名称

@@max_connections //可以创建的同时连接的最大数目

@@rowcount //受上一个SQL语句影响的行数

@@servername//本地服务器的名称

@@servicename //该计算机上的SQL服务的名称

@@timeticks //当前计算机上每刻度的微秒数

@@transcount //当前连接打开的事务数

@@version //SQL Server的版本信息

4. 输出

print'SQL服务名:'+@@servicename

select@@SERVICENAMEas'SQL服务名'

5. 逻辑控件语句

declare@avgfloat

select@avg=avg(Score_Num)fromScoreswhereStu_Id='sc0002'

print'平均分为'+convert(var8),@avg)+'分'

if(@avg>90)

begin

print'最高分'

selectMAX(Score_Num)fromScores

end

else

begin

print'最低分'

selectMIN(Score_Num)fromScores

6. while 循环语句

declare@nint

while(1=1)

begin

select@n=COUNT(*)fromScoreswhereScore_Num<60

if(@n>0)

updateScoressetScore_Num+=2 whereScore_Num<60

else

break

end

print'加分后的成绩'

select*fromScores

7. Case多分支语句

selectStu_id,score=case

whenScore_Num>90 then'A'

whenScore_Numbetween 80 and 89 then'B'

whenScore_Numbetween 60 and 79 then'C'

else'D'

end

fromScores

十一.高级查询

1. where子查询

2. in 和 not in 子查询

3. if exists (子查询)

;

㈢ sql常用语句,帮我归纳出来,谢谢

SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2... from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col....)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like '%value1%' ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in '具体数据库' where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in ('值1','值2','值4','值6')
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
"where 1=1" 是表示选择全部 "where 1=2"全部不选,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我们可以直接写成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、检查备份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6、修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的数据库名
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、说明:更改某个表
exec sp_changeobjectowner 'tablename','dbo'
9、存储更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
小记存储过程中经常用到的本周,本月,本年函数
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
上面的SQL代码只是一个时间段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周时间段.
下面的SQL的条件部分,就是查询时间段在本周范围内的:
Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存储过程中
select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)

㈣ 关于SQL Server中限制值的范围的问题。

简单的范围可以使用check约束
使用的是sql
server
2008简单说一下从sql
server
management
studio
中创建check,右击表格---选择设计----右击要进行限制的列----选择check约束----在表达式中输入限制条件,例如,id>10,修改一下名字,关闭就可以了;
还可以用命令创建,用命令创建check约束分为,创建表时候建立约束和创建表之后建立约束,可查看相关书籍资料,有详细描述。
p.s.
check约束是通过check约束中的表达式确定有效值,不是基于其它表格获取有效值

㈤ 在SQL中存储过程的一般语法是什么

sql server存储过程语法
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。

在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):

/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go

以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过command对象调用该存储过程的ASP代码如下:

'**通过Command对象调用存储过程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "getUserList" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
Set MyRst = MyComm.Execute
Set MyComm = Nothing

存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定

1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称

还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:

'**通过Connection对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是数据库连接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandType
Set MyConn = Nothing

'**通过Recordset对象调用存储过程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同

2. 没有输入输出的存储过程
请看以下存储过程:

/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go

该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:

'**通过Command对象调用存储过程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
MyComm.Execute '此处不必再取得记录集

Set MyComm = Nothing

当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。

3. 有返回值的存储过程
在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:

/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION

热点内容
lol一区为什么服务器好卡 发布:2025-02-12 09:02:22 浏览:629
安卓运营商cm是哪个版本 发布:2025-02-12 09:00:00 浏览:515
pythonmd5校验 发布:2025-02-12 08:51:00 浏览:470
编程题解析 发布:2025-02-12 08:40:30 浏览:454
bilibi手机缓存目录在 发布:2025-02-12 08:33:11 浏览:458
听ti密码是多少 发布:2025-02-12 08:22:15 浏览:288
淘宝上传视频凭证 发布:2025-02-12 08:06:46 浏览:879
java画 发布:2025-02-12 08:01:00 浏览:550
光遇安卓官服是在哪里下载 发布:2025-02-12 07:47:47 浏览:648
安卓手机如何关闭程序打开广告 发布:2025-02-12 07:31:06 浏览:469