总有记录:789条,共79页 总有记录:789条,共79页 1 2 3 4 5 6 7 8 9 10 11 12 总有记录:789条,共79页,点这里转到下十页 总有记录:789条,共79页,点这里转到尾页

您可以按 列表 | 普通 浏览

枚举SQLServer的实例

[ 2007-10-19 14:03:40 | 作者:南海十三少 | 出处:原创 | 天气:晴 ]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//所引入的命名空间
using System.Data.Sql;
namespace EnumSqlServer
{

public partial class MainForm : Form

{

public MainForm()

{

InitializeComponent();

}

private void MainForm_Load(object sender, EventArgs e)

{

//枚举本地网络内所有可用SqlServer实例

SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;

//返回

//----------------------------------------------------------------------------

// ServerName 服务器的名称

//----------------------------------------------------------------------------

// InstanceName 服务器实例的名称。如果服务器作为默认实例运行,则为空白

//----------------------------------------------------------------------------

// IsClustered 指示服务器是否属于群集

//----------------------------------------------------------------------------

// Version 服务器的版本(SQLServer2000为8.00.x,SQLServer2005为9.00.x)

//----------------------------------------------------------------------------

DataTable dt = instance.GetDataSources();

//绑定

cboServerList.DataSource = CreateCboDataSource(dt);

}

/// <summary>

/// 取得ComBox的数据源

/// </summary>

/// <param name="dt"></param>

/// <returns></returns>

private List<string> CreateCboDataSource(DataTable dt)

{

List<string> list = new List<string>();

foreach (DataRow dr in dt.Rows)

{

//只取ServerName

list.Add(dr[0].ToString());

}

return list;

}

}

}

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(122)

怎么清除sqlserver日志

[ 2007-7-10 18:12:52 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

方法1:
第一步:
backup log database_name with no_log
或者 backup log database_name with truncate_only --no_log和truncate_only是在这里是同义的,随便执行哪一句都可以
第二步:
1.收缩特定数据库的所有数据和日志文件,执行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比
2.收缩一次一个特定数据库中的数据或日志文件,执行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收缩的文件的标识 (ID) 号,若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc shrinkfile 将文件大小减少到默认文件大小
两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。

方法2(这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先备份整个数据库以备不测
第二步:
备份结束后,在Query Analyzer中执行如下的语句:
exec sp_detach_db yourDBName,true --卸除这个DB在MSSQL中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在Query Analyzer中执行如下的语句:
exec sp_attach_single_file_db yourDBName,'d:\mssql7\data\yourDBName_data.mdf'
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。
以上方法在清除log日志中均有效。
但,能否让sql server 不产生log日志呢?以上方法好像均无效。
我这儿正好有个case:
我客户的sql server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?
我分析了一下客户产生log日志的原因,并且做了相应测试。
客户是每天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。
比如:
SELECT * into test_2 from b_bgxx
共45000条记录,产生十几M log,如果
delete from test_2
产生80多M log ,这明显存在问题。
虽然可以换成:
truncate table test_2
但我还是希望能找到不产生log的方法。就如oracle不产生归档一样。

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(131)

建立MicrosoftSQLServer2005数据仓库

[ 2007-7-10 18:12:51 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

这几天用了一下Microsoft SQL Server 200的分析服务,贴出来给大家分享一下。
请多多指正。谢谢。
一、需求:
建立一个图书订单统计系统
1、统计各个图书馆订单数量。
2、统计各个图书馆订单的各个状态的数量占该图书馆的订单数量的百分比。
3、同时统计原始数量和储运数量
二、数据表
主要的字段
订单ID
单位号(图书馆编号)
单位(图书馆名称)
原始数量
储运数量
最新状态(该订单当前状态)
三、实现:
1、打开Visual Studio 2005 新建项目,选择Analysis Services项目,

选择数据源文件夹,新建数据源:

新建数据源向导启动:

点击上图新建出现连接配置对话框

配置方法和链接数据库的配置方法相同。

配置连接数据源的帐号,以后就是一路下一步:)

选择数据源视图文件夹,新建一个数据源视图

选择含有统计数据的表,以后就是一路下一步:)

选择多维数据集文件夹,新建多维数据集也就是一个Cube

设置事实表和维度表

选择度量值,也就是如果是SQL就是需要count,sum等要统计的数据

取消所有选项,然后选择维度也就是SQL里面GROUP by的字段(这里我选择了“最新状态”和“单位”)

选择如上,这个不是最终结果,后面还要手工编辑。,以后就是一路下一步:)

通过浏览打开编辑维度。

建立一个层次结构,单位在上,状态在下。

把“图书分销 订单 计数”重名名为“订单数量”

修改后如上图

切换到浏览器,拖放单位到行位置。

再拖放最新状态到行,最终效果如下。

拖放显示的数据,也就是明细

拖放完毕效果

设置显示为百分比

最终效果

打开Microsoft SQL Server 2005 的SQL Server Management Studio连接到分析服务

新建查询,查询结果如图
查询语句如下:
with
set [AllCount] as '[图书分销 订单].[层次结构].[单位].[安徽大学

图书馆].Children'

Member [图书分销 订单].[层次结构].[单位].[安徽大学

图书馆].[合计] as 'aggregate([AllCount])'

Member [所占订单数百分比] as '[订单数量]/([订单数量],[图书分销 订单].[层次结构].[单位].[安徽大学

图书馆].[合计])',format_string='#.00%'

select {[Measures].[订单数量],[Measures].[储运数量],[Measures].[原始数量],[所占订单数百分比]} on columns,
{[图书分销 订单].[层次结构].[单位].[安徽大学

图书馆].Children} on rows

from [图书馆统计]
其实也不是很难哦
有时间下次写在 ASP .NET 2.0里面如何显示查询结果。

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(118)

MySQL基本语句和连接字符串

[ 2007-7-10 18:12:48 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

需要先下载mysqlnet.exe,安装后引用CoreLab.MySql.dll

基本语句
insert into `mis`.`users`

( name, age) values ( "ywm", 13)

select id, name, age from `mis`.`users` limit 0, 50
delete from `mis`.`users` where id > 8
update `mis`.`users` set name = "ywm1" where id = 13

连接字符串
MySqlConnection conn = new MySqlConnection("User Id=root;Password=sa;Host=localhost;Database=mis;");
conn.Open();
MySqlDataAdapter da = new MySqlDataAdapter("select id, name, age from `mis`.`users` ",conn);
DataSet ds = new DataSet();
da.Fill(ds,"users");
conn.Close();
DataGrid1.DataSource= ds;
DataGrid1.DataBind();

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(179)

在SQLServer2005中实现表的行列转换

[ 2007-7-10 18:12:47 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

PIVOT和UNPIVOT关系运算符是SQL Server 2005提供的新增功能,因此,对升级到SQL Server 2005的数据库使用PIVOT和UNPIVOT时,数据库的兼容级别必须设置为90(可以使用sp_dbcmptlevel存储过程设置兼容级别)。
  在查询的FROM子句中使用PIVOT和UNPIVOT,可以对一个输入表值表达式执行某种操作,以获得另一种形式的表。PIVOT运算符将输入表的行旋转为列,并能同时对行执行聚合运算。而UNPIVOT运算符则执行与PIVOT运算符相反的操作,它将输入表的列旋转为行。
  在FROM子句中使用PIVOT和UNPIVOT关系运算符时的语法格式如下:


[ FROM { <table_source> } [ ,...n ] ]
<table_source> ::= {
 table_or_view_name [ [ AS ] table_alias ]
 <pivoted_table>

<unpivoted_table>

}
<pivoted_table> ::=table_source PIVOT <pivot_clause> table_alias
<pivot_clause> ::=( aggregate_function ( value_column )
 FOR pivot_column
  IN ( <column_list> )
)
<unpivoted_table> ::=table_source UNPIVOT <unpivot_clause> table_alias
<unpivot_clause> ::=( value_column FOR pivot_column IN ( <column_list> ) )
<column_list> ::= column_name [ , ... ] table_source PIVOT <pivot_clause>
  指定对table_source表中的pivot_column列进行透视。table_source可以是一个表、表表达式或子查询。
aggregate_function
  系统或用户定义的聚合函数。注意:不允许使用COUNT(*)系统聚合函数。
value_column
  PIVOT运算符用于进行计算的值列。与UNPIVOT一起使用时,value_column不能是输入table_source中的现有列的名称。
FOR pivot_column
  PIVOT运算符的透视列。pivot_column必须是可隐式或显式转换为nvarchar()的类型。
  使用UNPIVOT时,pivot_column是从table_source中提取输出的列名称,table_source中不能有该名称的现有列。
IN ( column_list )
  在PIVOT子句中,column_list列出pivot_column中将成为输出表的列名的值。
  在UNPIVOT子句中,column_list列出table_source中将被提取到单个pivot_column中的所有列名。
table_alias
  输出表的别名。
UNPIVOT < unpivot_clause >
  指定将输入表中由column_list指定的多个列的值缩减为名为pivot_column的单个列。
  常见的可能会用到PIVOT的情形是:需要生成交叉表格报表以汇总数据。交叉表是使用较为广泛的一种表格式,例如,图5-4所示的产品销售表就是一个典型的交叉表,其中的月份和产品种类都可以继续添加。但是,这种格式在进行数据表存储的时候却并不容易管理,要存储图5-4这样的表格数据,数据表通常需要设计为图5-5这样的结构。这样就带来一个问题,用户既希望数据容易管理,又希望能够生成一种能够容易阅读的表格数据。好在PIVOT为这种转换提供了便利。

图5-4 产品销售表 图5-5 数据表结构
  假设Sales.Orders表中包含有ProductID(产品ID)、OrderMonth(销售月份)和SubTotal(销售额)列,并存储有如表5-2所示的内容。
表5-2 Sales.Orders表中的内容


ProductID
OrderMonth
SubTotal

1
5
100.00

1
6
100.00

2
5
200.00

2
6
200.00

2
7
300.00

3
5
400.00

3
5
400.00
  执

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(136)

Sqlserver数据库开发常用汇总

[ 2007-7-10 18:12:46 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

1.按姓氏筆劃排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.資料庫加密:
select encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同 encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同
3.取回表中欄位:
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)
4.查看硬碟分區:
EXEC master..xp_fixeddrives
5.比較A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.殺掉所有的事件探察器進程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.記錄搜索:
開頭到N條記錄
Select Top N * From 表
-------------------------------
N到M條記錄(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到結尾記錄
Select Top N * From 表 Order by ID Desc
8.如何修改資料庫的名稱:
sp_renamedb 'old_name', 'new_name'
9:獲取當前資料庫中的所有用戶表
select Name from sysobjects where xtype='u' and status>=0
10:獲取某一個表的所有欄位
select name from syscolumns where id=object_id('表名')
11:查看與某一個表相關的視圖、存儲過程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看當前資料庫中所有存儲過程
select name as 存儲過程名稱 from sysobjects where xtype='P'
13:查詢用戶創建的所有資料庫
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
14:查詢某一個表的欄位和資料類型
select column_name,data_type from information_schema.columns
where table_name = '表名'
[n].[標題]:
Select * From TableName Order By CustomerName
[n].[標題]:
Select * From TableName Ord

分类:数据库技巧 | 部落: | 评论:2 | 阅读全文(178)

mysql4,mysql4.1,mysql数据库中文问题

[ 2007-7-10 18:12:44 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

mysql 4的数据库,如果要迁移到MYSQL 4.1去,是会有中文编码问题的,有关的文章介绍太
多了,GOOGLE一下就很多,关键是mysql 4.1开始支持多编码了。今天尝试一下迁移和插入读取等问题,发现一些规律和问题,总结如下

我机器是win2000 server,装了mysql 4,mysql 4.1 和mysql 5,用的是phpmyadmin 2.70 pl2.

首先,我用phpmyadmin 将mysql 4的一个表导出另存为abc.sql文件了。
之后,我先恢复到mysql 5中去,同样用phpmyadmin,输入http://localhost/phpmyadmin5/index.php(我在机器上
配置了三个phpmyadmin,都是同一版本,只不过分别连接mysql 4,mysql 4.1,mysql 5而已),注意在导入
功能时,选择编码为GB2312(这步很重要!),之后成功导入数据表里,
观察一下,注意此时该数据表的每一列的“整理”一项都是gb2312_chinese_ci, 而phpmyadmin设置的首页
里,mysql字符集合是uft-8,连接校对也是uft-8,同时,在my.ini中,设置
[mysqld]
character_set_server = utf8
[mysql]
default-character-set =utf8

这时,可以看到数据库用phpmyadmin看,不存在中文乱码问题了。

接下来,我们在PHP程序中,就可以正常象以前写CRUD程序那样,对数据库进行读取,增加等操作,是没有中文编码问题的哦

再接下来,我们用同样的方法,将数据表恢复到MYSQL 4.1数据库中去,注意,也是在导入时

选编码为GB2312,但发现PHPMYADMIN有一个出错,但不用理会,发现表还是导进去了
同样也是没中文问题,但注意,在用PHP程序处理时,必须象这样处理,否则有乱码问题
<?
header("content-type:text/html; charset=uft-8");
mysql_query("SET NAMES utf8;");
接下来是正常的MYSQL语句操作了
.....
?>

出处:jackyrong BLOG

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(180)

SQLServer2005Express附加(Attach)的数据库为“只读”的解决方法

[ 2007-7-10 18:12:43 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

我的操作系统为Windows 2003 Server , 文件系统NTFS, 在SQL Server 2005 Express 上附加(Attach)从另外一台电脑Copy过来的数据库后,数据库为“只读”。如下图:

解决办法:
打开 SQL Server Configuration Manager, 打开SQL Server SQLEXPRESS 的属性,如下图:


在内置帐号处,把“网络服务”改成“本地系统”,重新启动SQL Server 2005 Express 后,再附加(Attach)数据库一切正常。
总结:之所以附加(Attach)上的数据库为“只读”,是因为启动SQL Server 的默认的启动帐号“网络服务”对所附加(Attach)的数据库文件的权限不够造成的。

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(139)

利用视图管理器编写高效SQLSELECT语句

[ 2007-7-10 18:12:43 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

献给初学者,老鸟别扔砖头

编写 SQL 语句一直都是比较纳闷的事,编写时没有一个良好的检错机制,只能运行时才能发现错误,特别是关联的表一多起来,思绪不免会被搞得晕头转向最后不知迷失在什么地方了。近日偶然发现并不是 M$ 没有提供一个良好的傻瓜化界面给我们这帮懒兄懒弟们使用,而是我们自己视而不见,那就是 SQL Server 中的视图管理器,它不仅可以让我们方便地在多个表中进行查询而不去理会他们之间的关系(当然多个表之间必须存在必要的关系),还可以用它进行别名、排序、条件等的设置,然后自动产生出良好风格的 SQL SELECT语句,而且还可以测试运行结果。废话就说到这了,看看下面这张图片再自己亲自体验一下吧 :-)


(点击图片放大)

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(139)

SQLArtisan多层查询条件嵌套功能

[ 2007-7-10 18:12:40 | 作者:南海十三少 | 出处:转贴 | 天气:阴 ]

在实际开发过程中我们经常面对一些查询或统计子表信息,对于一层处理还是比较简单,如果二层、三层等或更多时这个时候编写出来的条件就比较复杂和容易出现编写错误的情况。SQL Artisan字段对象除了提供灵活的比较运算功能外,对象的In方法还提供N层条件嵌套的功能,让你在构造查询条件更灵活。
以MSSQL的NorthWind为例:
查询指定雇员在某段时间的销售金额。
处理的表:Employees,Orders,Order Details
在实现过程可以通过表关联查询或直接对目标表进行查询,对目标表直接进行查询就必须把父表的条件以嵌套的方式添加到当前查询条件中。
Employee.Employee->Orders.OrderDate-> Sum(Order Details)作一个反向条件嵌套。
以下是两种查询方法在SQL语句和SQL Artisa组件下的实现。
(代码只是用于表达SQL Artisan组件的功能,对于SQL语句本身存在的其他问题不作讨论)
SQL方法一:

SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID INNER JOIN [Order Details] ON Orders.OrderID=[Order Details].OrderID where ( ( Employees.EmployeeID = 3 And Orders.OrderDate &gt;= '1997-7-1' ) And Orders.OrderDate &lt;= '1997-8-1')


SQL Artisan方法一:

query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Orders._EmployeeID)&amp;amp;

Orders.TBL.INNER(OrderDetails.TBL,Orders._OrderID));

query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};

query.Expreesion = Employees._EmployeeID.At(Employees.TBL) ==3 &amp;

Orders._OrderDate.At(Orders.TBL) &gt;= DateTime.Parse("1997-7-1")&amp;amp;

Orders._OrderDate.At(Orders.TBL) &lt;= DateTime.Parse("1997-8-1");

ds = query.ExecuteDataSet();

SQL方法二:

SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM [Order Details] where OrderID in (select OrderID from Orders where ( ( ( OrderDate &gt;= '1997-7-1'And OrderDate &lt; '1997-8-1' ) And EmployeeID in (select EmployeeID from Employees where ( EmployeeID = 3 )) ) ))


SQL Artisan方法二:
IQuery query = session.CreateQuery(OrderDetails.TBL);
query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};

query.Expreesion = OrderDetails._OrderID.In(Orders.TBL,Orders._OrderID,

Orders._OrderDate &gt;= DateTime.Parse("1997-7-1") &amp;amp;

Orders._OrderDate < DateT

分类:数据库技巧 | 部落: | 评论:0 | 阅读全文(141)

总有记录:789条,共79页 总有记录:789条,共79页 1 2 3 4 5 6 7 8 9 10 11 12 总有记录:789条,共79页,点这里转到下十页 总有记录:789条,共79页,点这里转到尾页

您可以按 列表 | 普通 浏览

导航

归档

日历

我的简历

  • 姓名:南海十三少
  • 性别:男
  • 学号:00276
  • 等级:榜眼
  • 注册日期:
  • Email:w@w.com
  • 城市:武汉
  • 发消息给我
  • 加为好友

我的书包

公告

南海十三少

部落

  • 没有加入任何部落!

最新回复

联接

统计

  • 访问人数:152859 人
  • 创建时间:2007-7-9
  • 发表文章:789 篇
  • 上传相片:0 张
  • 回复总数:16 篇
  • 阅读总数:61409 次
  • RSS订阅
  • mozilla firefox:支持WEB标准的最佳浏览器
  • 理论上本站符合XHTML标准,但由于用户输入日志的不确定性,可能会有几个错误通不过