可以采用exec方法
declare @tempStr varchar(350)
select @tempStr='Update weekcount set [' convert(varchar,@week) ']=[' convert(varchar,@week) '] 1 where
userid=''' replace(@user,'''','''''') ''''
exec(@tempStr)
注意: 使exec不能返回一些变量的值,而且当前的变量值在exec的语句里无效.
游标操作时进行Update应注意的一个问题
在进行游标操作时,如果你使用了Order by 子句,但Order by 的字段没有索引, 则会导至游标为只读属性, 并且不能指定
为for Update状态.
解决办法有去掉Order by 子句或者对Order by的字段进行索引.
关于在 win2000 下安装 mysql 的一些问题!
前一段时间,发表了一编安装mysql的文章,结果有很多的朋友来问相关的问题。(太多了,应付不了)
1. 关于在其他目录安装mysql
ljf@sinonets.net.cn的朋友问:
我在win 2000下安装 mysql-shareware-3.22.32-win,希望改变路径,如d:win32appmysql但导致mysql服务无法启动,改变:d:my.cnf文件里所有相关路径为d:win32appmysql也不行
方法如下:
如你把目录转移就要这样来启动mysql
D:win32appmysqlinmysqld --basedir D:win32appmysql
net start mysql
2.从旧的版本升级
windymail@sina.com的朋友问:
我按照您的文章 win2000下安装mysql-shareware-3.22.32-win时遇到几个问题想请教您一下
我在运行c;mysqlinmysql-shareware --install时出现了failed to service 的信息
我以前安装的是3.11的版本
方法如下
请把原 3.11 的文件和reg里关于它的东西完全清除。然后再安装.
在清除之前要把你的 mysql 停止(
net stop mysql
mysqladmin --user=root --password=your password shutdown
),否则的话~~~~~
3.mysql的数据库在那里??LINUX那里吗?
dao,mysql安装在win2000上那数据库当然是在……
4.那里可以下载?
在这里就有啊
我的
e-mail:freeboy@popsun.com
欢迎来韶关热线找我讨论关于服务器和asp的问题。在bbs或者chitchat都可以找到。我的ID是freeboy。到了就说找网管就OK了。
讨论SELECT TOP N 问题
Hi, everyone:
本贴讨论SELECT TOP N问题.
现在正在一家计算机公司兼职,开发ASP应用. 在最近的一个商业项目里有这样一个需求:用户在查询时,只需要按照某(些)列排序后TOP 20的纪录. SQL SERVER 7很好地支持了TOP N 操作,但考虑到系统移植问题, 我又考虑在其他几个主流DBMSs中如何实现. 鉴于只有DB2 UDB 7,ORACLE 8i,SQL SERVER 7,本贴仅讨论这三个DBMS.
简单地说,TOP N问题就是:在SELECT中,仅选择按照某(些)列排序后TOP N的纪录. 考虑到等值问题,又可以分为两种: 一是仅仅返回N条纪录(M 1), 二是还包括所有于第N条等值的纪录(M 2). 当然最内层的子查询也可以有其他的子句, 或者TOP N也可以应用在没有ORDER BY的情况下,这样更简单.
1. SQL SERVER 7: 用 TOP N (WITH TIES)
M1:
SELECT TOP N * FROM MYTABLE ORDER BY ORD_COL;
M2:
SELECT TOP N WITH TIES * FROM MYTABLE ORDER BY ORD_COL;
注: SQL SERVER 7提供了PERCENT N WITH TIES, ACCESS 中提供了TOP N,但含义是M 2.
2. ORACLE 8i: 用 ROWNUM<=N
M1:
SELECT * FROM
( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
WHERE ROWNUM<=N
M2:
SELECT * FROM MYTABLE WHERE ORD_COL>=
(SELECT MIN(ORD_COL) FROM
( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
WHERE ROWNUM<=N)
ORDER BY ORD_COL DESC
注意以下两种错误用法:
WRONG 1:
SELECT * FROM MYTABLE
WHERE ROWID<=N
ORDER BY ORD_COL DESC;
WRONG 2:(因为WHERE ROWNUM<=N 在ORDER BY 前执行)
SELECT * FROM MYTABLE
WHERE ROWNUM<=N
ORDER BY ORD_COL DESC;
3: DB2
用FETCH FIRST N ROWS ONLY
M1:
SELECT * FROM MYTABLE
ORDER BY ORD_COL DESC
FETCH FIRST N ROWS ONLY
M2:
没有找到,因为DB2不允许在FROM中嵌套有ORDER BY子句的子查询.
还不清楚ORACLE的M 2有没有更好的办法,以及其他的DBMS如何实现TOP N操作,请其他朋友补充.
在SQL2000查询中使用XDR的例子
XDR不会不知道吧?就是简化的XML-Data啦。现在示范一个如何实现这样的查询
SELECT o.OrderID, o.OrderDate from Orders o, Customers c,
WHERE o.CustomerID = c.CustomerID and c.CompanyName = ?
Code:
<%@ Language=VBScript %>
<%
Dim sConn
sConn = "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=Northwind; User ID=SA;Password=;"
Dim adoConn
Set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.ConnectionString = sConn
adoConn.CursorLocation = 3 'adUseClient
adoConn.Open
Dim adoCmd
Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandText = "Customer[@CompanyName=""Tortuga Restaurante""]"
adoCmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
adoCmd.Properties("Mapping Schema") = "Orders.xml"
adoCmd.Properties("Base Path") = "C:INETPUBWWWROOTPBA"
adoCmd.Properties("Output Stream") = Response
Response.write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024 'adExecuteStream
Response.write "</XML>"
%>
Result:
<XML ID="MyDataIsle">
<Customer CustomerID="TORTU" CompanyName="Tortuga Restaurante">
<Order CustomerID="TORTU" OrderID="10276" OrderDate="1996-08-08T00:00:00" />
<Order CustomerID="TORTU" OrderID="10293" OrderDate="1996-08-29T00:00:00" />
<Order CustomerID="TORTU" OrderID="10304" OrderDate="1996-09-12T00:00:00" />
<Order CustomerID="TORTU" OrderID="10319" OrderDate="1996-10-02T00:00:00" />
<Order CustomerID="TORTU" OrderID="10518" OrderDate="1997-04-25T00:00:00" />
SQL Server 7.0 的数据迁移到MySQL上的一种方法
Microsoft SQL Server 7.0 的数据迁移到MySQL上的方法
Zhbforce
想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很少的一部分功能。据调查,绝大部分用户只用到了Office产品的20%的功能,很少有人注意到Visual Basic for Application。实际上,熟悉掌握VBA的功能可以使你的工作事半功倍,尤其对会计、金融等专业来说,作出一套好的宏,几乎可以作到一劳永逸!最近,AutoCAD中也加入了VBA的功能,这不能不说这是一个趋势!
VBA的功能决不只是让病毒制造者用来制造麻烦的,VBA能被用来制造病毒的同时也正说明了其功能的强大与易用!利用ADO对象,可以很方便的进行数据库操作!下面就是一个简单的数据交换的例子:
由于ADO对象不直接支持MySQL,所以必须先安装MyODBC, 后者也是一个免费产品,在www.mysql.org上有下载,安装好了MyODBC, 就可以在ODBC数据源管理中配置一个数据源名称,把它指向你想连接的MySQL数据库。代码如下:
Sub connectMySQL()
'通过MyODBC去连接MySQL数据库,并将Microsoft SQL Server 7
'的数据转进mysql中
Dim sConnect As String, sSql As String, i As Long
Dim cnMSSQL As New ADODB.Connection
Dim cnMySQL As New ADODB.Connection
'声明并创建对象 连接
Dim rs As New ADODB.Recordset '声明并创建对象 记录集
Dim cm As New ADODB.Command '声明并创建对象 命令
sConnect = "dsn=mysql1" '指定MySQL的数据源名称
cnMySQL.Open sConnect '连接到 mysql
sConnect="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=123456;Initial Catalog=softdown;Data Source=ntserver"
'连接到 ms sql server 7
cnMSSQL.Open sConnect
'sSql = "create table softinfo (softNum smallint,softname varchar(70),softdesc blob," & _
"softpath varchar(30),softleng varchar(10),softclass varchar(10),softsugest tinyint(1)," & _
"softdown smallint(4))" '创建新的MySQL数据表语句
sSql = "select * from softinfo order by softnum"
rs.Open sSql, cnMSSQL, 1, 1
MySQL优化全攻略-服务器参数调整
正确的编译方法固然重要,但它只是提高MySQL服务器性能工作的一部分。MySQL服务器的许多参数会影响服务器的性能表现,而且我们可以把这些参数保存到配置文件,使得每次MySQL服务器启动时这些参数都自动发挥作用。这个配置文件就是my.cnf。
MySQL服务器提供了my.cnf文件的几个示例,它们可以在/usr/local/mysql/share/mysql/目录下找到,名字分别为my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中关于规模的说明描述了该配置文件适用的系统类型。例如,如果运行MySQL服务器的系统内存不多,而且MySQL只是偶尔使用,那么使用my-small.cnf配置文件最为理想,这个配置文件告诉mysqld daemon使用最少的系统资源。反之,如果MySQL服务器用于支持一个大规模的在线商场,系统拥有2G的内存,那么使用mysql-huge.cnf最为合适。
要使用上述示例配置文件,我们应该先复制一个最适合要求的配置文件,并把它命名为my.cnf。这个复制得到的配置文件可以按照如下三种方式使用:
全局:把这个my.cnf文件复制到服务器的/etc目录,此时文件中所定义的参数将全局有效,即对该服务器上运行的所有MySQL数据库服务器都有效。
局部:把这个my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/将使该文件只对指定的服务器有效,其中[MYSQL-INSTALL-DIR]表示安装MySQL的目录。
用户:最后,我们还可以把该文件的作用范围局限到指定的用户,这只需把my.cnf文件复制到用户的根目录即可。
那么,如何设置my.cnf文件中的参数呢?或者进一步说,哪些参数是我们可以设置的呢?所有这些参数都对MySQL服务器有着全局性的影响,但同时每一个参数都和MySQL的特定部分关系较为密切。例如,max_connections参数属于mysqld一类。那么,如何才能得知这一点呢?这只需执行如下命令:
% >/usr/local/mysql/libexec/mysqld --help
该命令将显示出和mysqld有关的各种选项和参数。要寻找这些参数非常方便,因为这些参数都在“Possible variables for option --set-variable (-O) are”这行内容的后面。找到这些参数之后,我们就可以在my.cnf文件中按照如下方式设置所有这些参数:
set-variable = max_connections=100
这行代码的效果是:同时连接MySQL服务器的最大连接数量限制为100。不要忘了在my.cnf文件[mysqld]小节加上一个set-variable指令,具体请参见配置文件中的示例
SQL Server性能分析参数
当您怀疑计算机硬件是影响SQL Server运行性能的主要原因时,可以通过SQL Server Performance Monitor监视相应硬件的负载,以证实您的猜测并找出系统瓶颈。下文将介绍一些常用的分析对象及其参数。
Memory: Page Faults / sec
如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。
Process: Working Set
SQL Server的该参数应该非常接近分配给SQL Server的内存值。在SQL Server设定中,如果将"set working set size"置为0, 则Windows NT会决定SQL Server的工作集的大小。如果将"set working set size"置为1,则强制工作集大小为SQLServer的分配内存大小。一般情况下,最好不要改变"set working set size"的缺省值。
Process:%Processor Time
如果该参数值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
Processor:%Privileged Time
如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy writer IO"等措施都会降低该值。
Processor:%User Time
表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
Physical Disk:Avg.Disk Queue Length
该值应不超过磁盘数的1.5~2倍。要提高性能,可增加磁盘。
注意:一个Raid Disk实际有多个磁盘。
SQLServer:Cache Hit Ratio
该值越高越好。如果持续低于80%,应考虑增加内存。
注意该参数值是从SQL Server启动后,就一直累加记数,所以运行经过一段时间后,该值将不能反映系统当前值。
如何转移SQL SERVER数据库
我用的是SQL server 6.5,(刚刚用,新手啦),原来放数据库的服务器要更换,请问如何转移?手边的这本书和我的操作界面不一样,很让我生气!我基本思路是这样的:先备份数据库----有了*.dat文件---在另一台机器上设置设备、库、表(将*.sql文件用isql生成表结构)---用restore恢复(应该是恢复表的内容)。
可做到最后一步,restore按钮总也不亮,不知我的思路可有错误,现在问题应该怎么解决,请大侠们出手相助!!!
azury (来自 202.111.130.166) 于 99-5-19 上午 11:58:10 加贴在 SQL数据库:
1 . 原有数据库服务器不要动。
2 . 重新安装一个Sql Server 服务器。
3 . 安装完毕在 Enterprise manager 中将两个服务器都映象进来
(其实,就是Register两个)
3 . 选择要转移的数据库
4 . 菜单中选Tools --> Database Backup/Restore
5 . 设置源/目的以及其他参数
6 . 进行转移(非常快)
试试吧。
:)
露茜 (来自 202.111.130.166) 于 99-5-19 上午 11:56:52 加贴在 SQL数据库:
然后再把原来的目录全部拷过来,覆盖现有的文件就可以了
不过我也是听说的,没有试过,azury姐姐可能会有比较好的办法,但是她的方法可能会使数据出现一些错误
小懒 (来自 202.111.130.166) 于 99-5-19 下午 12:00:54 加贴在 SQL数据库:
在enterprise manager中的菜单--TOOL--DATABASE/OBJECT TRANSFER
选择原来的sql server服务器和库是source
destination就是你现在的server和database
visitor (来自 210.72.252.34) 于 99-5-19 下午 04:16:49 加贴在 SQL数据库:
MS在6.5升级到7.0时问题多多.
给他们的工程师打过电话,
至今也没能提供一个简便/可靠的方案.
若非不得以,
还是在7.0上从头开始吧!
分布式查询和分布式事务
Microsoft® SQL Server™ 允许创建与称为链接服务器的 OLE DB 数据源的链接。在链接到 OLE DB 数据源之后,可以:
从 OLE DB 数据源引用行集,作为 Transact-SQL 语句中的表。
将命令传递给 OLE DB 数据源,并包含结果行集,作为 Transact-SQL 语句中的表。
每个分布式查询都可以引用多个链接的服务器,而且可以对每个链接的服务器分别执行更新或读取操作。单个分布式查询可以对某些链接的服务器执行读取操作,并且对其它链接的服务器执行更新操作。通常情况下,每当某个事务可能更新多个链接服务器中的数据时,Microsoft SQL Server 都要求相应的 OLE DB 提供程序支持分布式事务。因此,链接服务器上所支持的查询类型取决于 OLE DB 提供程序中对事务的支持级别。OLE DB 为事务管理定义了两个可选的接口:
ITransactionLocal 支持 OLE DB 数据源中的本地事务。
ITransactionJoin 允许提供程序联结包含其它资源管理器的分布式事务。
所有支持 ITransactionJoin 的提供程序也都支持 ITransactionLocal。
如果在连接是自动提交模式时执行分布式查询,则应用以下规则:
对于不支持 ItransactionLocal 的提供程序,只允许执行读取操作。
对于支持 ITransactionLocal 的提供程序,允许执行所有更新操作。
主控 SQL Server 会自动调用每个参与更新操作的链接的服务器中的 ITransactionLocal,以启动本地事务,并在语句执行成功时提交或在语句执行失败时回滚。
如果分布式查询是针对分布式分区视图或者是在连接为显式或隐性事务时执行,则应用下列规则:
对于不支持 ITransactionJoin 的提供程序,只允许执行读取操作。不支持任何事务或只支持 ITransactionLocal 的提供程序不能参与更新操作。
如果 SET XACT_ABORT 设置为 ON,则对于支持 ITransactionJoin 的任意提供程序都允许执行所有的更新操作。主控 SQL Server 会自动调用每个参与更新操作的链接服务器中的 ITransactionJoin,以便在分布式事务中登记该服务器。然后当主控服务器表示要提交或回滚事务时,MS DTC 将提交或者回滚。
如果 SET XACT_ABORT 设置为 OFF,则链接服务器还必须支持嵌套事务,才能对其执行更新操作。当会话已经有一个现有事务时,如果提供程序支持调用 ITransactionLocal::StartTransaction,则支持嵌套事务。这使 SQL Server 得以回滚分布式查询中的单个语句,而不是回滚整个事务。
上述规则意味着提供程序的下列限制不支持嵌套事务:仅在 XACT_ABORT 选项设置为 ON 时,分布式事务中才允许更新操作。
SQL Server 7.0 一般问题
【「Microsoft SQL Server 7.0」以下简称「SQL Server 7.0」】
在SQL Server 7.0中如何不重启SQL Server服务,即可循环errorlog(错误日志)?(New)
在SQL Server 7.0中如果要cycle errorlog,(即重新产生一个新的errorlog,errorlog变成errorlog.1,errorlog.1变成errorlog.2,...)但不重新激活SQL Server Service,在SQL Server 7.0提供了一个新的Stored procedure:sp_cycle_errorlog。您可利用这个stored procedure达到cycle errorlog的功能。
将Internet explorer 5.0安装在有安装SQL Server 7.0的Windows 95/98的计算机上,在执行SQL Server 7.0 Wizard或点选Property各页面时,常会有"这个作业的执行无效,即将关闭。如果问题无法解决,请洽询程序设计人员。"或其它错误讯息如何解决?
这是因为安装Internet Explorer5.0变更了comctl32.dll这个档案造成的。请升级SQL Server 7.0至Service Pack 1。
安装Office 2000 或Microsoft SQL Server 7.0 客户端程序之后由SQL Server6.5所附的MS Query存取SQL Server 6.5的资料得到的是乱码如何解决?
这可能是因为您使用SQL Server ODBC 3.70.06.23版的Driver。请不要设定"Perform translation for character data",并且升级SQL Server ODBC 版本至3.70.06.90。
附注:SQL server 7.0附的是3.70.06.23 ,SQL server 7.0 SP1附的是3.70.06.90。
如何由网际网络查询关于SQL Server 7.0产品最完整的相关信息?
参考美国微软网站 http://www.microsoft.com/sql/default.asp,您可由此查询到关于产品的概观、功能、系统需求、评估工具、产品价格等等相关信息
目前Microsoft SQL Server 7.0有那几种版本?
EnterPrise Edition。
Standard Edition。
Desktop Edition。
若无特别提及,一般都是指Standard Edition(标准版)。
SQL Server 7.0有无中文版?
SQL Server 7.0为双字节版本,可安装于Windows NT Server4.0中文版上。
如何在命令提示字符下激活MSSQLServer 7.0 desktop edition?
请执行下列指令:c:mssqlinnscm.exe -Action 1 -Silent 1
是否可以在命令提示字符下激活SQL Server 7.0 Desktop Edition的SQLServerAgent?
不行。此为产品限制。
如何增加SQL Server 7.0 error log的数目?
SQL Server预设的数目为六个,如果要增加请在Query Analyzer下执行下列指令:
xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftMSSQLServerMSSQLServer', 'NumErrorLogs','REG_DWORD', 20
如何重建SQL Server 7.0的Master database?
SQL Server 7.0提供一个新的工具:Rebuildm.exe,这个档案位于MSSQLBINN。必需注意的是重建SQL Server 7.0的Master database亦建MSDB及MODEL数据库。AREMicrosoftMSSQLServerMSSQLServer', 'NumErrorLogs','REG_DWORD', 20
SQL Server全文检索简介
全文索引和全文检索是sql server 7.0的新增功能,它能够对数据中的字符类型列(如varchar、text等类型列)进行索
引,并通过索引实现全文搜索查询。sql server常规索引与全文检索相比,二者的区别如下:
常规索引 全文索引
使用create index或约束定义创建 使用全文索引存储过程创建和删除
通过删除或执行drop index语句删除
当插入、修改或删除数据时,sql server 只能通过任务调度或执行存储过
能够自动更新常规索引内容 程来填充全文索引
每个表可以建立多个常规索引 每个表只能有一个全文索引
索引不能分组 同一个数据库中的多个全文索引可
以组织为一个全文目录
常规索引存储在数据库文件中 全文索引存储在文件系统中
为了支持全文索引操作,sql server 7.0新增了一些新存储过程和transact-sql语句,使用这些存储过程创建全文索引的
具本步骤为(括号内为每步所调用的存储过程名称):
(1)启动数据库的全文处理功能(sp_fulltext_datebase);
(2)建立全文目录(sp_fulltext_catalog);
(3)在全文目录中注册需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文检索的列名(sp_fulltext_column)
(5)为表创建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
例:
use pubs
go
exec sp_fulltext_database 'enable'
--为titles表建立全文索引数据元,其中create为建立,activate为激活,deactivate为关闭表全文索引的激活状态,使
它不再参加全文目录填充,drop为删除;create参数中,后面跟的是全文目录名称和索引列名。
--下面语句为pubs数据库中的titles表创建全文索引数据元,存储该数据元的全文目录为FT_pubs,所使用的唯一索引为
UPKCL_titleidind(title表中为title_id列的PRIMARY KEY约束所建立的唯中索引)
sp_fulltext_table titles,'create','FT_pubs','upkcl_titledind'
--激活它
sp_fulltext_table titles,'activate'
--指定参加全文索引的列
sp_fulltext_column 'titles','title','add'
sp_fulltext_column 'titles','notes','add'