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:返回指定的 startdateenddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。

语法:DATEDIFF ( datepart , startdate , enddate )

 参数datepart:是指定所跨边界类型的 startdateenddate 的一部分。 下表列出了所有有效的 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  是一个表达式,可以解析为 timedatesmalldatetimedatetimedatetime2datetimeoffset 值。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语句更改表的列的数据类型和添加新列和约束,以级重命名表名和列名
2009-08-19 17:27

--如何用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.

 

posted @ 2012-06-07 18:26  blog_yuan  阅读(342)  评论(0)    收藏  举报