SSAS视图中构建该表的关系
设置维度,父ID设置维度用法为父级,然后重新拖拽个父ID。
在SSRS中构建计算项
将计算项拖拽到数据区域,我们可以看到父ID=0的就是根
在SSRS中设置报表参数用来展示下钻图标
在记录集中通过参数进行筛选
设置图表属性,设置操作传递参数进行下钻
效果如下
本文链接
在网上找了好长时间利用SQL Server发送邮件,都一直没有成功,最后还是自己摸索的,拿出来给大家分享一下。
1、
2、
3、
4、
5、
6、
7、
8、
9、
10、
11、
12、
到这里,邮件应该是已经能发送成功了。大家可以试一下。。
下面介绍2个语句,是用来查询发送邮件状态的
select * from msdb.dbo.sysmail_allitems
select * from msdb.dbo.sysmail_event_log
第一条语句里有一个sent_status字段,就可以清楚的看到发送邮件是否功能,第二条语句可以查看邮件发送的日志
最后再说一下如何用sql语句来发送邮件
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'TestProfile',--图3里的“配置文件名”
@recipients = '123@qq.com;456@qq.com',--收件人的邮箱,多个邮箱用分号“;”分开
@subject = '查询结果',--邮件主题
@body='查询结果在附件中',--邮件内容
@query = 'select * from China.dbo.s_province',--查询语句
@attach_query_result_as_file = 1,--查询在邮件中体现形式,0为邮件内容,1为邮件附件,默认0
@query_attachment_filename='aaa.txt'--邮件附件文件名
MSSQL 2008也是可以的哦。。
用sp_send_dbmail来发送邮件还可以有很多参数,比如说邮件格式可以是text或html等等,具体参数可以参考MSDN对对sp_send_dbmail的详细解释
http://msdn.microsoft.com/zh-cn/library/ms190307(v=sql.90).aspx
本文链接
一、写在前面 - 想说爱你不容易
为了升级数据库至SQL Server 2008 R2,拿了一台现有的PC做测试,数据库从正式库Restore(3个数据库大小夸张地达到100G+),而机器内存只有可怜的4G,不仅要承担DB Server角色,同时也要作为Web Server,可想而知这台机器的命运是及其惨烈的,只要MS SQL Server一启动,内存使用率立马飙升至99%。没办法,只能升内存,两根8G共16G的内存换上,结果还是一样,内存瞬间被秒杀(CPU利用率在0%徘徊)。由于是PC机,内存插槽共俩,目前市面上最大的单根内存为16G(价格1K+),就算买回来估计内存还是不够(卧槽,PC机伤不起啊),看样子别无它法 -- 删数据!!!
二、删除数据 - 众里寻他千百度
删除数据 -- 说的容易, 不就是DELETE吗?靠,如果真这么干,我XXX估计能“知道上海凌晨4点的样子”(KB,Sorry,谁让我是XXX的Programmer,哥在这方面绝对比你牛X),说了这么多,你明白为什么不能用DELETE了吗?如果还不明白,请自行Google(谁在说度娘?直接拉出去喀嚓)。既然不能直接DELETE,那还有什么好办法呢?继续Google,终于发现了一些可行的办法,但也是众说纷纭:
1. 批量删除
脚本类似如下,中心思想就是一次删除给定的记录条数,但只commit一次,貌似效率应该会好点,但是如果要删除的表比较多,数据量也比较大的话,还是会担心日志会比较多,而且写起来也不是特别方便。
set rowcount 5000
while 1=1
begin
begin tran
delete from X
commit
if @@rowcount = 0
break
end
set rowcount 0
2. 强悍的TRUNCATE出场吧
我之前也一直想用TRUNCATE来着,但是我的要求是并不是把数据库中的表全部干掉,即是有条件的保留和删除(例如删除2012年之前的数据),为了使用TRUNCATE,那只能先把要保留的数据先存起来,而关于如何保留这些数据也有几种方法
2.1 保留->TRUNCATE->还原
脚本类似如下
SELECT * INTO #keep FROM Original WHERE CreateDate > '2011-12-31'
TRUNCATE TABLE Original
INSERT Original SELECT * FROM #keep
第一条语句会把所有要保留的数据先存放至表#keep中(表#keep无需手工创建,由SELECT INTO生效),#keep会Copy原始表Original的表结构。PS:如果你只想创建表结构,但不拷贝数据,则对应的脚本如下
SELECT * INTO #keep FROM Original WHERE 1 = 2
第二条语句用于清除整个表中数据,产生的日志文件可以忽略;第三条语句用于还原保留数据。
几点说明:
- 你可以不用SELECT INTO,自己通过写脚本(或拷贝现有表)来创建#keep,但是后者有一个弊端,即无法通过SQL脚本来获得对应的表生成Script(我的意思是和原有表完全一致的脚本,即基本列,属性,索引,约束等),而且当要操作的表比较多时,估计你肯定会抓狂;
- 既然第一点欠妥,那考虑新建一个同样的数据库怎么样?既可以使用现有脚本,而且生成的数据库基本一致,但是我告诉你最好别这么做,因为第一要跨库,第二,你得准备足够的磁盘空间
2.2 新建->拷贝->DROP->重命名
CREATE TABLE #keep AS (xxx) xxx -- 使用上面提到的方法(使用既有表的创建脚本),但是不能够保证完全一致;
INSERT #keep SELECT * FROM Original where clause
DROP TBALE Original
EXEC SP_RENAME '#keep','Original'
三、数据收缩 - 犹抱琵琶半遮面
数据删除后,发现数据库占用空间大小并没有发生变化,此时我们就用借助强悍的数据收缩功能了,脚本如下,运行时间不定,取决于你的数据库大小,多则几十分钟,少则瞬间秒杀
DBCC SHRINKDATABASE(DB_NAME)
(未完待补充完整)
本文链接