SQLserver笔记
2012-2-26 2:26
1、查询SQL中的所有表:
Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE'
执行之后,就可以看到数据库中所有属于自己建的表的名称
2、查询SQL中所有表及列:
Select dbo.sysobjects.name as Table_name, dbo.syscolumns.name AS Column_name FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id Where (dbo.sysobjects.xtype = 'u') AND (NOT (dbo.sysobjects.name LIKE 'dtproperties'))
3、在Sql查询分析器,还有一个简单的查询方法:
EXEC sp_MSforeachtable @command1="sp_spaceused '?'"
执行完之后,就可以看到数据库中所有用户表的信息
4、查询总存储过程数:select count(*) 总存储过程数 from sysobjects where xtype='p'
D = 默认值或 DEFAULT 约束F = FOREIGN KEY 约束L = 日志FN = 标量函数IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
--1:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
--2:获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
--3:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
--4:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
--查看数据库中所有的触发器名称
select NAME AS 触发器名称 from sysobjects where xtype='TR'
--5:查询用户创建的所有数据库
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
--6:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'
--针对字段值进行判断
SELECT u.ID, Name, Age, (case Sex when 1 then '男' else '女' end) sex, Email,r.rolename
FROM T_User u left join dbo.T_Role r
on u.roleid =r.id
where 1=1;
select case when a>b then a else b end as result from table_16
存贮过程批量插入数据
create procedure insertInto
as
declare @start int;
declare @ends int;
set @start=1;
set @ends =1009;
while @start <=@ends
begin
set @start=@start+1
insert into dbo.t_1(a,b)values(@start,@start)
end
go
sqlServer 删除的几种方法:
truncate和delete都可以删除数据
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
---------------------------------2014/3/17 2:56------------------------------------------
SqlServer:返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。
语法:DATEDIFF ( datepart , startdate , enddate )
参数datepart:是指定所跨边界类型的 startdate 和 enddate 的一部分。 下表列出了所有有效的 datepart 参数。 用户定义的变量等效项是无效的。
| datepart | 缩写 |
|---|---|
|
year |
yy, yyyy |
|
quarter |
qq, q |
|
month |
mm, m |
|
dayofyear |
dy, y |
|
day |
dd, d |
|
week |
wk, ww |
|
hour |
hh |
|
minute |
mi, n |
|
second |
ss, s |
|
millisecond |
ms |
|
microsecond |
mcs |
|
nanosecond |
ns |
startdate 是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。从 enddate 减去 startdate。
为避免不确定性,请使用四位数年份。 有关两位数年份的信息,
使用实例:
SELECT DATEDIFF(year, '2012-12-31 23:59:59.9999999'
, '2013-03-12 00:00:00.0000000');
---------------------------------------------------------------------------------------------------------------------------------------------
--SQLSERVER随机数:
DECLARE @counter varchar;
SET @counter = 1;
WHILE @counter < 5
BEGIN
SELECT CAST(char(65+ RAND(100) * @counter)as CHAR ) Random_Number
SET @counter = @counter+1
END;
GO
select char(65+ceiling(rand()*25))
----------------------------------------------------------------------------------------------------------------
用sql语句更改表的列的数据类型和添加新列和约束,以级重命名表名和列名
--如何用sql更改表的列的数据类型和添加新列和约束
--增加一列
ALTER TABLE 表名 ADD 列名 VARCHAR(20) NULL
--删除一列
ALTER TABLE 表名 drop COLUMN 列名
--修改一列
sp_rename 'Orders.order_mum','order_num','column'
--修改一列的类型
alter TABLE 表名 ALTER COLUMN 列名 VARCHAR(40)
--添加主键约束
alter table 表名
add constraint 约束名 primary key (列名)
--添加唯一约束
alter table 表名
add constraint 约束名 unique (列名)
--添加默认约束
alter table 表名
add constraint 约束名 default(内容) for 列名
--添加check约束
alter table 表名
add constraint 约束名 check(内容)
--添加外键约束
alter table 表名
add constraint 约束名 foreign key(列名) references 另一表名(列名)
--删除约束
alter table 表名
drop constraint 约束名
--纵向连接两个表
select *from stuInfo union
select *from stuMarks
--重命名,表名
exec sp_rename '原表名','改后表名'
--重命名,列名:
QuestionState: table name; szType: COLUMN name; new name: RepairTypeID; 'COLUNM': 关键字
EXEC sp_rename 'QuestionState.[szType]', 'RepairTypeID', 'COLUMN' go
----------------------------------------------------------------------
--将主键列非自增改为自增的方法
--1 删除主键列
alter table DEMO1..S20130708_01 drop column [Uid]
GO
--2 添加列
alter table DEMO1..S20130708_01 add [Uid] int identity(1,1)
GO
--3 修改为主键
alter table DEMO1..S20130708_01
add constraint fy primary key ([Uid])
GO
select Uname,Age,Uid from DEMO1..S20130708_01
sql 更新之后,返回行数:
qlserver语句中怎么获取正在更新的记录的id
2012-03-31 14:18 yue982170730 | 分类:数据库DB | 浏览427次
2012-03-31 16:16 提问者采纳
update LineBPSet SET ConsPerson='chen' output inserted.Id where Id=5
这个语句可以满足你的要求,不止可以返回id 而且其他的字段也是可以一起返回的。
delete,insert 都可以用output来返回。
--返回行数的第二种方法
DECLARE @sqltxt nvarchar(4000),@row integer
set @sqltxt='delete from table where id=2'
exec(@sqltxt)
set @row = @@rowcount --执行完后保存受影响的行数至变量
http://blog.csdn.net/downmoon/article/details/7436683 -- 事物参考 SqlServer 2000 版本以上
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nerv3x3/archive/2008/12/07/3465547.aspx
sql Server关键字:2005 版本以上的;
----sqlserver触发器 版本2000以上
CREATE TRIGGER [dbo].[Trigger_Name]--create Trigger.
ON [dbo].[T_user] --Monitor table name.
for INSERT,DELETE,UPDATE --action
AS
insert into T_user_H --save to table
SELECT * FROM INSERTED--Temp table show data.

浙公网安备 33010602011771号