ms sql study note

使用bcp导入数据:
使用bcp之前:
1)定义好数据导入的表格结构(create table)
2)定义一些外部环境:需要运行下面的语句,不太明白其中的含义


EXEC sp_configure "show advanced options", 1
GO
RECONFIGURE
GO
EXEC sp_configure "xp_cmdshell", 1  --开启cmdshell
RECONFIGURE
GO
配置好了之后再使用bcp语句:
EXEC master..xp_cmdshell 'BCP  bi_combivent_weekly.dbo.hospital in "C:\Documents and Settings\administrater\Desktop\data.txt" -c -T'问题是,说要使用完成之后关闭xp_cmdshell:
EXEC sp_configure "xp_cmdshell",0  --关闭cmdshell
然而,执行完了此语句之后,直接执行bcp语句依然能够成功地插入数据。但是,在电脑上第一次执行bcp语句是却必须先执行以下配置语句。究竟是什么意思?难道没有关闭某个权限??




select into from 是很好用的?直接生成新表格,而且使得字段的格式继承母表格!


删除某张表格 drop table 表名


if object_id(N'[tblWeekList]',N'U') is not null
begin
执行语句
end
上句用来判断数据库中是否存在某个对象,如果存在执行某操作。N'(1)',N'(2)'(1)放置对象名称,(2)放置对象类型。可选对象有很多,其中U表示“表”!




set @wkdate = convert(varchar(12),@wkEnding,101)
函数convert是将已有的时间转换成想要的日期格式!
http://www.w3school.com.cn/sql/func_convert.asp


SQL Server Date 函数:DATEDIFF() 函数返回两个日期之间的天数。
http://www.w3school.com.cn/sql/func_datediff.asp


dateadd DATEADD() 函数在日期中添加或减去指定的时间间隔。
http://www.w3school.com.cn/sql/func_dateadd.asp


CAST('2006-04-04T15:50:59.997' AS datetime)一般格式,cast('待转换内容'as 转换成的格式类型
http://www.w3school.com.cn/sql/func_convert.asp




inner join(等值连接) 只返回两个表中联结字段相等的行 
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录




update hospital set Ename=hospital.Cname 
update还可以整列的更新




ROW_NUMBER() OVER(ORDER BY Cname DESC) AS 字段
row_number()是个函数,用来自动生成序号,并且增加为显示的一列,over()相当于一个从句的开始词一样,括号里面放置order by 列名 desc或者asec 排序方式
例子:
select top 5 *,ROW_NUMBER() OVER(ORDER BY Cname DESC) AS 字段编号 from hospital


exec 有2种使用方法:一个是执行存储过程,另一种是执行一个动态的批处理。动态批处理,就是把sql查询或者其他语句写成varchar的变量,然后再一起执行,一个功能就是可以不把语句写死~~~


smalldatetime数据类型示例:2007-05-08 12:35:00
比较datetime:2007-05-08 12:35:29.123
datetime 是十分长且精确的时间,精确到毫秒。small可能表示减小的时间表示:只精确到妙。


嵌套游标,生成复杂报表!!
cursor(翻译:游标)是个数据类型。
declare 变量名称 cursor 
for select * from 表--这句话是指定这个游标是为了指示什么样的表格而设定的。
open 刚才游标的变量名称
fectch next from 游标变量名称
while @@FECTCH_STATUS=0
begin
其它执行语句
必须存在之语句:fetch next from 光标变量名--再循环体内将读取其余行数据
end
close 变量名称--关闭游标
deallocate 变量名称


游标嵌套的作用是可以把集合操作转换成单个记录处理方式。我知道了!也许可以解决当一条数据没有明显的id编号时使用。因为如果用while循环语句,需要一个可以用来表示循环进程的列!但是采用了游标嵌套,则可以方便的也许是因为系统自动生成了序号把!


关于批次go
每次一个意思的代码段结束了之后都可以加个go,这样有个好处,当代码出现问题时,我们可以从执行结果窗口中,都看到哪些批次是被成功执行了的。而且go 2 表示将上个批次执行2次,也就是还可以指定一个批次被执行的次数。类似重复执行的操作。




创建非聚集索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] )
NONCLUSTERED
创建一个指定表的逻辑排序的索引。对于非聚集索引,数据行的物理排序独立于索引排序。有关详细信息,请参阅非聚集索引结构。
无论是使用 PRIMARY KEY 和 UNIQUE 约束隐式创建索引,还是使用 CREATE INDEX 显式创建索引,每个表都最多可包含 999 个非聚集索引。
对于索引视图,只能为已定义唯一聚集索引的视图创建非聚集索引。
默认值为 NONCLUSTERED。
!!原来索引的数量是有限的999,那么不可能是每条数据对应一个索引了???所以是怎么发挥作用的?
create nonclustered index 自己定索引名称 on 表名(列名)
create nonclustered index idx on tempActivityDetails(TargetID,Period)--注意到,这句语句中列名是含有2项!!究竟索引是什么!???






alter table temTargetsDetailsRollup add 
Reach float not null default 0,
Freq  float not null default 0
创建表格的脚本可以直接参考表结构输出的脚本写,上面的修改表结构代码表示增加新的2列,reach为列名,float是数据类型 not null表示一个非空约束,default 0也许表示修改后的表仍然使用旧的表名。


pivot 是一个可以将列转行的函数,可以用在直接生成表的时候,不改变excel中文件的x-y轴,而是在此处就改动好!


ROUND函数是四舍五入函数,返回数字表达式并四舍五入为指定的长度或精度。
语法:
ROUND ( numeric_expression , length [ , function ] ) 


select ''000000303'' as ProductCode, case Combivent when ''Y'' then ''Writers'' else ''Non-Writers'' end [Type],




union的用法:
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
union顾名思义联合2张表,2张表的表结构相同,把其中一张表直接续写到另一张表上。union是直接续写不判断出现重复的值,重复值不去重。


real是一种什么样的数据类型??
从 ?3.40E + 38 到 3.40E + 38 之间的浮点数字数据。存储大小为 4 字节。在 SQL Server 中,real 的同义词为 float(24)


update OutputGeoRxRollup set 
NRxPilotStartYTDGrowth = NRxPilotStartYTD/NRxPilotStartYTDStly -1,
NRxPilotStartYTDGrowth2 = NRxPilotStartYTD2/NRxPilotStartYTDStly2 -1,
TRxPilotStartYTDGrowth = TRxPilotStartYTD/TRxPilotStartYTDStly -1,
TRxPilotStartYTDGrowth2 = TRxPilotStartYTD2/TRxPilotStartYTDStly2 -1
很好的同时更新很多列的简写方式




Truncate table 表名 速度快,而且效率高,因为:
  TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
  DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
  TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
  对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
  TRUNCATE TABLE 不能用于参与了索引视图的表。
  对用TRUNCATE TABLE删除数据的表上增加数据时,要使用UPDATE STATISTICS来维护索引信息。
  如果有ROLLBACK语句,DELETE操作将被撤销,但TRUNCATE不会撤销。


 还原数据库:
先建立一个同名的数据库,然后选择,还原数据库(而不是文件或者文件组),然后在还原的过程中点击和“常规”并排的“选项”,勾上覆盖原有数据库。就ok了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值