昨天在将一个 SQL Server 2000 数据库附加到 SQL Server 2008 时出现如下的错误:
附加数据库 对于 服务器“servername”失败。 (Microsoft.SqlServer.Smo)
无法升级数据库 ‘dbname’,因为它是只读的,或者具有只读文件。请将数据库或文件设为可写,然后重新运行恢复操作。 (Microsoft SQL Server,错误: 3415)
查看了数据库文件,他们并没有只读属性,在 SQL Server 2000 中附加都是一切正常的啊。点击错误消息对话框的帮助链接,打开的却是一个 I’m sorry 的无效链接,BS 一下微软。
多方研究,发现并不是文件只读的问题,严格说应该是一个“权限”的问题,当前的 SQL Server 登录帐号没有对要附加文件的可写权限,就会出现上述“只读”的提示,
解决办法有以下几种:
方法1: 将要附加的文件拷贝到 SQL Server 默认的 Data 目录,此时附加就会成功;
方法2: 在登录验证时,选择“Windows 身份验证”,而不是“SQL Server 身份验证”,即便你的登录帐号是 sa;
方法3: 如果一定要使用“SQL Server 身份验证”,请更改登录帐号的权限使其对要附加文件有完全操作权限;
&nbs ......
SQL Server 2008 R2的十大变化(上),SQL Server 2008 R2的十大变化(下) 这十大特性中我比较感兴趣的是StreamInsight:通过SQL Server 2008 R2新的StreamInsight组件,Microsoft进入了复杂事件处理(Complex Event Processing,CEP)竞争,其中相关的供应商还有Oracle、IBM和StreamBase。
SQL Server 2008 R2引入StreamInsight功能,可以为开发人员提供一套全方位的平台来开发基于事件的应用程序。与传统的基于查询的应用程序有所不同,基于事件的应用程序需要在低延迟的前提下迅速处理海量数据。
StreamInsight系列-What it is
StreamInsight系列-Adapter
StreamInsight系列-QueryTemplate\QueryBinder\Query
Hosting StreamInsight applications using WCF
MSDN站点:http://msdn.microsoft.com/zh-cn/sqlserver/ee476990(en-us).aspx
MSDN文档:http://msdn.microsoft.com/en-us/library/ee362541(SQL.105).aspx ......
数据库操作类:
复制代码 代码如下:
/// <summary>
/// 取得总数
/// </summary>
/// <returns></returns>
public string getTotal()
{
StringBuilder sb = new StringBuilder();
sb.Append("select count(*) total from Test");
DataTable dt = DBHelper.ExecuteDt(sb.ToString());
return dt.Rows[0][0].ToString();
}
/// <summary>
/// 根据当前页码,每页条数,取得相应数据。
/// </summary>
/// <param name="pageNum">每页显示条数</param>
/// <param name="currentPage">当前页码</param>
/// <returns></returns>
public DataTable getPagesData(int pageNum, int currentPage)
{
StringBuilder sb = new StringBuilder();
sb.Append("select top " + pageNum + " * from Test where ");
sb.Append("ID not in (select top " + pageNum * currentPage + " ID from Test)");
return DBHelper.ExecuteDt(sb.ToString());
}
前台:
复制代码 代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" I ......
数据库操作类:
复制代码 代码如下:
/// <summary>
/// 取得总数
/// </summary>
/// <returns></returns>
public string getTotal()
{
StringBuilder sb = new StringBuilder();
sb.Append("select count(*) total from Test");
DataTable dt = DBHelper.ExecuteDt(sb.ToString());
return dt.Rows[0][0].ToString();
}
/// <summary>
/// 根据当前页码,每页条数,取得相应数据。
/// </summary>
/// <param name="pageNum">每页显示条数</param>
/// <param name="currentPage">当前页码</param>
/// <returns></returns>
public DataTable getPagesData(int pageNum, int currentPage)
{
StringBuilder sb = new StringBuilder();
sb.Append("select top " + pageNum + " * from Test where ");
sb.Append("ID not in (select top " + pageNum * currentPage + " ID from Test)");
return DBHelper.ExecuteDt(sb.ToString());
}
前台:
复制代码 代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" I ......
SQL Server 2008 定时作业的制定
--1.打开【SQL Server Management Studio】,在【对象资源管理器】列表中选择【SQL Server 代理】;
--2.鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤;
--3.展开【SQL Server 代理】列表,右击【作业】-->【新建作业】;
--3.1 在【常规】选项卡中:
-- 输入作业名称,如"My Job";
--3.2 在【步骤】选项卡中:
--3.2.1 点击【新建】,输入【步骤名称】,如“步骤1”,类型默认T-SQL脚本,也可以选择SSIS包等;
--3.2.2 在【数据库】一栏选择要作业处理的数据库,在【命令】的右边空白编辑栏输入要执行的SQL代码,
EXEC p_Name --如:执行一个P_Name的存储过程
-- 也可以点击命令下面的【打开】,打开.sql脚本;
--3.2.3 输入运行脚本后,建议点击【分析】,确保脚本语法正确,然后点击下面的【确定】按钮;
--3.3 在【计划】选项卡中:
--3.3.1 点击【新建】,输入【计划名称】,如“计划1”,计划类型默认是”重复执行”,也可以选择执行一次等;
--3.3.2 在【频率】-->【执行】处选择“每天”、“每周”或“ ......
今天在用UNION进行将两个查询结合时,发现加了text类型的字段进去就报错了,错误信息如下:
不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型。
经过翻阅资料后才知道,原因在于如此操作 无法对text类型判断是否重复,所以要在UNION后加个ALL关键字,如下:
select top 6 * from
(select top 6 a.content,b.title, b.takenoticeid ID,b.taketime,type = 1 from takenotice_content as a,
(select * from comm_takenotice_201004 where takeperson = 'g567890' )as b
where a.contentid = b.contentid and b.readstatus ='0'
union all
select top 6 a.content,title = '', b.takesmsid ID,b.taketime,type = 2 from takesms_content as a,
(select * from comm_takesms_201004 where takeperson = 'g567890')as b
where a.contentid = b.contentid ) x order by taketime desc
如需按某一条件排序,则要加别名,如上面sql中的x,方可执行。 ......
--SQL解密ctext字段内容函数
--exec sp_decrypt '约束名称'
--exec sp_decrypt 'DF_InsuranceRecord_PeriodUnit'
--exec sp_decrypt '存储过程名称'
--exec sp_decrypt 'sp_SearchPrinting_InsuranceRecord'
--主要用途:读取systemcomments中的字段内容。包括约束,存储过程等等。
--原文应该来自http://blog.csdn.net/j9988/archive/2004/04/16/16747.aspx,作者发布文章只有3篇,可能转了移BLOG.不过确实是高手。省却了我很多的时间。本来打算先找OX字符传格式的破解函数,或者在C#中解密的viabanry(8000)字段内容。
--存在存储 过程超过4000时候会换行的一些评论中反映的问题。出现错误我会及时修正。
CREATE PROCEDURE sp_decrypt(@objectName varchar(50))
AS
begin
set nocount on
begin tran
declare @objectname1 varchar(100),@orgvarbin varbinary(8000)
declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) ......