SQL语法大集锦!!! (0分)

  • 主题发起人 chenliqun
  • 开始时间
C

chenliqun

Unregistered / Unconfirmed
GUEST, unregistred user!
[h4][blue]SQL语法集锦![/blue][/h4]​
来,来,来!​
我抢占先机已在这个繁华的论坛上开辟了一块宝地!​
那就是汇集五湖四海的SQL语法实例技巧。​
赶快加入吧,不要忘了写清你所用的SQL数据库名!​
 
MS SQL 2000
这里实现的是自动把一个数据库内的全部用户表的插入权限赋给Public组
DECLARE c_grant CURSOR FOR
SELECT 'GRANT INSERT ON ' + name + ' TO Public'
FROM sysobjects
WHERE TYPE = 'u'
ORDER BY 1
FOR READ ONLY
OPEN c_grant
DECLARE @s_grant VARCHAR(255)
FETCH c_grant into @s_grant
WHILE @@FETCH_STATUS = 0 begin
EXECUTE(@s_grant)
FETCH c_grant into @s_grant
END
CLOSE c_grant
DEALLOCATE c_grant
 
MS SQL 2000
为Pubs数据库的sysindexes系统表建立索引视图,这个视图将使你很容易查看每个表的索引情况。
create view dbo_index_columns as
select
o.name table_name,
i.name index_name,
index_col(o.name, indid, n) column_name,
n index_colid
from
sysindexes i,
sysobjects o,
(select 1 n
union select 2
union select 3
union select 4
union select 5 --Put in as many of these as you need.
) n --这段select语句达到每次查询执行五次以取出每个索引的所有组成字段!
where
i.id = o.id and
n <= keycnt and
index_col(o.name, indid, n) is not null
go
 
现在我拿到了一个朋友的数据库备份“F:/RossMRP2002”想把它安装到自己的数据库内。
首先,查看此备份是否有效:
RESTORE VERIFYONLY FROM DISK='F:/RossMRP2002'
结果为:备份集有效。
然后,查看此备份包含多少个备份文件:
RESTORE HEADERONLY FROM DISK='F:/RossMRP2002'
结果为:RossMRP 备份,NULL,1,NULL,0,1,2,sa,SERVER,RossMRP,539,2002-08-20
可见,这里只有一个名为“RossMRP 备份”的完整备份,下面查看其来源数据库的文件构成情况:
结果为:RossAuto_Data,c:/Program Files/Microsoft SQL Server/MSSQL/Data/RossMRP_Data.mdf,D,PRIMARY,7077888,35184372080640
    RossAuto_Log,C:/Program Files/Microsoft SQL Server/MSSQL/data/RossMRP_Log.LDF,L,NULL,1048576,35184372080640
可见,这是个简单的数据库。一个数据库文件和一个日志文件。最重要的是路径不同于自己的数据库。
下面开始正式恢复数据库:
RESTORE DATABASE RossMRP FROM DISK='F:/RossMRP2002'
WITH MOVE 'RossAuto_Data' TO 'F:/SQLData/XP/MSSQL$CLQ/Data/RossAuto_Data.mdf',
MOVE 'RossAuto_Log' TO 'F:/SQLData/XP/MSSQL$CLQ/Data/RossAuto_Log.ldf'
至此,数据库恢复完毕。
 
这样写会很乱的.
 
其实在sql server中的代理-》作业中,输入如下的T_SQL语句,旧可以实现每天的
自动备份
use master
backup database 数据库名字
to disk='存储备份文件的路径'
简单实用哦。
如果再加上format with语句的话,就可以让自动备份的文件缩小很多哦。
 
如果那些“UP”“好”“学习”能少一些,我就大呼“万岁”了。
以下是初学SQL时做的笔记ms sql 2000
select * from 数据源 where 类型 = '动画片'
{列出表数据源中所有列中类型为动画片的数据}
select * INTO temp1 from 数据源 where 类型 = '动画片'
{将表数据源中所有列中类型为动画片的数据添加到表temp1中,表temp1在原库中需不存在,否则出错}
SELECT COUNT(*) FROM 数据源 where 类型 = '007系列'
{查询表数据源中类型列为'007系列'的有几条数据}
UPDATE 数据源 SET 入库时间 = '2003-06-11 00:00:00.000' WHERE 入库时间 = '2003-06-01 00:00:00.000'
{将表数据源中列名为入库时间,值为'2003-06-01 00:00:00.000'的改为'2003-06-11 00:00:00.000',
其中,不带where将无条件修改列中所有值为'2003-06-11 00:00:00.000'}
if exists (select name from master.dbo.sysdatabases where name = 'mytest') DROP DATABASE mytest
CREATE DATABASE mytest
{判断mytest这个数据库是否存在,有则先删除,然后再创建}
USE master
GO
sp_addlogin @loginame = 'test', @passwd = 'test', @defdb = 'mytest'
GO
USE mytest
GO
sp_grantdbaccess 'test'
GO
{在master库中增加用户test,然后将库mytest的访问权交给test}
use mytest
GO
sp_dropuser 'test'
GO {打开mytest库,并将该库的操作用户test删除}
sp_droplogin 'test' {将test这个SQL登陆用户删除,条件是没有给它分配任一数据库的管理权}
sp_dropsrvrolemember 'test', 'sysadmin' {将用户从固定服务器角色中删除}
sp_addsrvrolemember 'test', 'sysadmin' {将用户加入指定固定服务器角色中}
sp_droprolemember 'db_datareader','test' {将用户从固定数据库角色中删除}
sp_addrolemember 'db_datareader','test' {将用户加入指定固定数据库角色中}

if exists (select name from sysobjects where name = '类型') DROP TABLE 类型
CREATE TABLE 类型 ([类型] [nvarchar] (10) NOT NULL)
ALTER TABLE 类型 WITH NOCHECK ADD CONSTRAINT [PK_类型] PRIMARY KEY NONCLUSTERED ([类型])
{判断库中是否有类型这个表,有则先删除,然后再创建,并建立索引(升序)}
INSERT [标题] ([标题],[类型]) VALUES('007择日再死','007系列')
{在表标题的列标题和类型中插入相应的值}
USE s5 INSERT INTO MyBooks SELECT 类型 FROM 数据源 WHERE 环境 = 'asf'
{用用户s5将表数据源中类型列的值导入(添加)到表MyBooks中,条件是表数据源中环境列值为'asf'}
USE s5
GO
DELETE temp1 WHERE 类型 = '007系列' and 环境 = 'avi'
GO {用用户s5删除表temp1中类型列为'007系列',环境列为'avi'的数据}
DROP TABLE temp1{删除当前库的表temp1的表定义及该表的所有数据、索引、触发器、约束和权限规范}
{注:DROP TABLE s5.dbo.temp1 则是删除s5这个数据库中的temp1表}
DROP DATABASE test1{删除test1这个数据库,DROP DATABASE test1,test2则是同时删除test1和test2}
 
以下是实例,后面有说明。
if exists (select name from master.dbo.sysdatabases where name = 'mytest') DROP DATABASE mytest
CREATE DATABASE mytest
use master
GO
sp_droplogin 'test'
GO
sp_addlogin @loginame = 'test', @passwd = 'test', @defdb = 'mytest'
GO
USE mytest
GO
sp_grantdbaccess 'test'
GO
sp_addrolemember 'db_datareader','test'
GO
sp_addrolemember 'db_datawriter','test'
GO
if exists (select name from sysobjects where name = '类型') DROP TABLE 类型
CREATE TABLE 类型 ([类型] [nvarchar] (10) NOT NULL)
ALTER TABLE 类型 WITH NOCHECK ADD CONSTRAINT [PK_类型] PRIMARY KEY NONCLUSTERED ([类型])
说明:建立数据库mytest,在该库中增加表'类型',增加一个SQL用户test,给用户读和写数据库的权限。
注:增加sp_addrolemember 'db_owner','test',则给用户对该数据库的绝对操作权,可增加、修改表。
 
select count(1) from '表1'
比较有效率哦!
 
语句:select * from tab where 日期型字段=#2003-7-28#
在BDE+ACCESS时没有任何问题,却不能在BDE+ODBC+ACCESS下执行,为什么?
 
http://www.pigtwo.com/forum/list.asp?boardid=14论坛坏了,暂时打不开.
收集了300多条sql方面的集锦,有空去看看
 
1创建一个新数据库
exec sp_database 'mdb'
mdb为创建的数据库名称
2创建windows登陆用户
exec sp_grantlogin 'maplt/windows'
'maplt/windows'为用户名称,计算机名/用户名
删除该用户
exec sp_revokelogin 'maplt/windows'
3创建SQL登陆用户
exec sp_addlogin 'sa','123','mdb'
sa为SQL用户名,123为该用户密码,mdb为可在此数据库上操作
删除该用户
exec sp_droplogin 'sa'
4在数据库mdb中创建表abc
use mdb
go
create table abc(name char(20),mail char(30))
(name char(20),mail char(30))为该表里的字段有name,mail
删除该表
drop table abc
5创建存储过程ab,完成功能是查询这里所有用户,假设用户表为user
use mdb
go
create procedure ab
as
select * from user
执行此过程
exec ab
结果为所有用户资料
带参数存储过程,@name变量,用来存储输入值以便下面查询
create procedure ab(@name)
as
select * from user where name=@name
执行此过程
exec ab @name='delphibbs'
结果是列出名字为delphibbs的所有资料
删除存储过程
drop procedure ab
重命名过程,把ab改为abc
sp_rename 'ab','abc'
修改过程
alter procedure ab.....(同上创建)
6在数据表user插入新的字段name
alter table user add name char(20)
删除该字段
alter table drop cloumn name
7在数据库mdb的表name中插入新的名字为雨伞的数据
use mdb
go
insert into(name)values('雨伞'),多行数据用,符号分开。
8创建名字为aa的触发器,完成功能是在表user中插入或修改数据的时候写出‘命令成功’
create trigger aa on user for insert,update
as
if update(user)
print '命令成功'
删除该触发器
drop trigger aa
重命名触发器aa为bb
sp_rename 'aa','bb'
9流程控制语句
if...else
...
如果为真就执行if后面的程序,反之执行else
后面的,在此语言中else
可不写,则如果为假就结束程序,什么也不做!
begin
....end
区块语句,表示其中的是一段一块的语句,具体我也说不清楚,呵,俺也是菜鸟啊。
while....continue......break
循环操作,为满足while后面的条件的话continue停止下面的程序返回while后面的判断直至满足,break结束。
case
此为选择,又可为case....when......then
.....else
......end
例如字段mz520为存储论坛用户积分的,小于于100的就显示‘一般用户’,大于100的就显示‘高级用户’,而等于0的就为新注册用户。
case mz520
when mz520>100 then
'高级用户'
when mz520<100 then
'一般用户'
else
print '此用户为新注册用户'
end
10查询停顿语句
waitfor delay '0:0:50'
............
此句为停顿50秒以后继续执行下面的程序
11清空数据表aa的内容但不清空字段表格
truncate aa
delete aa /*此为删除此表内容与表格*/
其他的索引,约束就不再讲了,我水平有限,大要想学好就去买本书看看,我这说的都是一些常用的函数与语句!
 
顶部