SQL Server数据库技术文档中心
===========================================================
如何缩小SQL Server数据库日志文件
===========================================================
数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL Server的一个BUG吧。

  专家解答:找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可。

  SET NOCOUNT ON
  DECLARE @LogicalFileName sysname,
  @MaxMinutes INT,
  @NewSize INT
  USE Marias
  -- 要操作的数据库名
  SELECT @LogicalFileName = 'Marias_log'
  -- 日志文件名
  @MaxMinutes = 10,
  -- Limit on time allowed to wrap log.
  @NewSize = 100
  -- 你想设定的日志文件的大小(M)
  -- Setup / initialize
  DECLARE @OriginalSize int
  SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
  SELECT 'Original Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)
  DECLARE @Counter INT,
  @StartTime DATETIME,
  @TruncLog VARCHAR(255)
  SELECT @StartTime = GETDATE(),
  @TruncLog = 'BACKUP LOG '
  + db_name() + ' WITH TRUNCATE_ONLY'
  DBCC SHRINKFILE (@LogicalFileName, @NewSize)
  EXEC (@TruncLog)
  -- Wrap the log if necessary.
  WHILE @MaxMinutes > DATEDIFF
  (mi, @StartTime, GETDATE()) -- time has not expired
  AND @OriginalSize = (SELECT size
  FROM sysfiles WHERE name = @LogicalFileName)
  AND (@OriginalSize * 8 /1024) > @NewSize
  BEGIN -- Outer loop.
  SELECT @Counter = 0
  WHILE ((@Counter < @OriginalSize / 16)
  AND (@Counter < 50000))
  BEGIN -- update
  INSERT DummyTrans VALUES ('Fill Log')
  DELETE DummyTrans
  SELECT @Counter = @Counter + 1
  END
  EXEC (@TruncLog)
  END
  SELECT 'Final Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  DROP TABLE DummyTrans
  SET NOCOUNT OFF


sqlserver 发表于:2007.06.14 20:33 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(115095次) :: 评论 (8)
===========================================================
如何使用SQL Server嵌套子查询
===========================================================
有两种子查询类型:标准和相关。标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询)。

  试想这个问题:你想生成一个卖平垫圈的销售人员列表。你需要的数据分散在四个表格中:人员.联系方式(Person.Contact),人力资源.员工(HumanResources.Employee),销售.销售订单标题(Sales.SalesOrderHeader),销售.销售订单详情(Sales.SalesOrderDetail)。在SQL Server中,你从内压式(outside-in)写程序,但从外压式(inside-out)开始考虑非常有帮助,即可以一次解决需要的一个语句。

  如果从内到外写起,可以检查Sales.SalesOrderDetail表格,在LIKE语句中匹配产品数(ProductNumber)值。你将这些行与Sales.SalesOrderHeader表格连接,从中可以获得销售人员IDs(SalesPersonIDs)。然后使用SalesPersonID连接SalesPersonID表格。最后,使用ContactID连接Person.Contact表格。

  USE AdventureWorks ;
  GO
  SELECT DISTINCT c.LastName, c.FirstName
  FROM Person.Contact c JOIN HumanResources.Employee e
  ON e.ContactID = c.ContactID WHERE EmployeeID IN
  (SELECT SalesPersonID
  FROM Sales.SalesOrderHeader
  WHERE SalesOrderID IN
  (SELECT SalesOrderID
  FROM Sales.SalesOrderDetail
  WHERE ProductID IN
  (SELECT ProductID
  FROM Production.Product p
  WHERE ProductNumber LIKE'FW%')));
  GO

  这个例子揭示了有关SQL Server的几个绝妙事情。你可以发现,可以用IN()参数替代SELECT 语句。在本例中,有两次应用,因此创建了一个嵌套子查询。

  我是标准化(normalization)的发烧友,尽管我不接受其荒谬的长度。由于标准化具有各种查询而增加了复杂性。在这些情况下子查询就显得非常有用,嵌套子查询甚至更加有用。

  当你需要的问题分散于很多表格中时,你必须再次将它们拼在一起,这时你可能发现嵌套子程序就很有用。


sqlserver 发表于:2007.06.14 20:29 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(33796次) :: 评论 (0)
===========================================================
如何应用SQL Server DBCC避免堵塞
===========================================================
在危急时刻,数据库一致性检测(DBCC)可能是你最重要的工具。本文向你简单介绍DBCC的功能,它们包括:
  •   检测表和相关目录的完整性。
  •   检测整个数据库。
  •   检测数据库页的完整性。
  •   重建任何指定表中的目录。
  •   你为何需要学习DBCC

  如果你甚至还不知道为何使用DBCC,下面提供一些原因:

  •   需要不断分割数据库页(表和目录),这可能会破坏分配。
  •   目录可能遭到破坏,或效率降低。
  •   SQL Server引擎有时会误解你的意图。
  •   需要大量更新时,事情可能会很麻烦(记住,任何指定的更新实际为删除和插入)。
  •   单个页面,虽然仍然“健康”,但可能会失去它们的最优存储足迹。

  如何运行DBCC

  你可以用两种方法运行DBCC:通过命令行窗口或查询分析器(Query Analyzer)窗口。如果你认为必要,你还可以确定其操作的时间。(我从未感到有必要这样做,因为在微软的所有产品中,我对SQL Server的稳定性最为自信。我认为它是雷蒙德推出的最佳产品。但是,感觉也可能出错。)

  DBCC命令包括以下扩展:

  •   CheckDB:检测整个数据库的一致性,是检查数据库破坏的基本方法。
  •   CheckTable:检测特定表的问题。
  •   CheckAlloc:检测数据库的单个页面,包括表和目录。
  •   Reindex:重建某个特定表的目录。
  •   CacheStats:说明当前存储在内存缓存中的对象。
  •   DropCleanBuffers:释放当前存储在缓冲区中的所有数据,这样你就可以继续进行检测,而不必使用前面的结果。
  •   Errorlog:删除(缩短)当前日志。你可以考虑确定包含这个命令的操作的时间,一个星期左右运行一次。
  •   FlushProclnDB:清除特定数据库的存储过程缓存(使用它的数据库id而不是名称)。使用下列代码找出id:

SELECT dbid FROM master.dbo.sysdatabases

WHERE name = '<name your poison>

  •   IndexDefrag:减少目录分裂,但不给文件加锁,以便用户能够继续应用数据库。
  •   CheckCatalog:检测特定数据库表及表之间的一致性(后者意味着使用外键等。)

sqlserver 发表于:2007.06.14 20:26 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(10482次) :: 评论 (0)
===========================================================
优化MySQL数据库查询
===========================================================
任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响。

  如同其它学科,优化查询性能很大程度上决定于开发者的直觉。幸运的是,像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。

  1: 使用索引

  MySQL允许对数据库表进行索引,以此能迅速查找记录,而无需一开始就扫描整个表,由此显著地加快查询速度。每个表最多可以做到16个索引,此外MySQL还支持多列索引及全文检索。

  给表添加一个索引非常简单,只需调用一个CREATE INDEX命令并为索引指定它的域即可。列表A给出了一个例子:

  列表 A

  mysql> CREATE INDEX idx_username ON users(username);
  Query OK, 1 row affected (0.15 sec)
  Records: 1 Duplicates: 0 Warnings: 0

  这里,对users表的username域做索引,以确保在WHERE或者HAVING子句中引用这一域的SELECT查询语句运行速度比没有添加索引时要快。通过SHOW INDEX命令可以查看索引已被创建(列表B)。

  列表 B

  mysql> SHOW INDEX FROM users;
  | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
  | users | 1 | idx_username | 1 | username | A | NULL | NULL | NULL | YES | BTREE | |
  1 row in set (0.00 sec)

  值得注意的是:索引就像一把双刃剑。对表的每一域做索引通常没有必要,且很可能导致运行速度减慢,因为向表中插入或修改数据时,MySQL不得不每次都为这些额外的工作重新建立索引。另一方面,避免对表的每一域做索引同样不是一个非常好的主意,因为在提高插入记录的速度时,导致查询操作的速度减慢。这就需要找到一个平衡点,比如在设计索引系统时,考虑表的主要功能(数据修复及编辑)不失为一种明智的选择。

  2: 优化查询性能

  在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。下面的一个简单例子可以说明(列表C)这一过程:

  列表 C

  mysql> EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode = country.code AND country.code = 'IND';

  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

  | 1 | SIMPLE | country | const | PRIMARY | PRIMARY | 3 | const | 1 | Using index |
  | 1 | SIMPLE | city | ALL | NULL | NULL | NULL | NULL | 4079 | Using where |

  2 rows in set (0.00 sec)这里查询是基于两个表连接。EXPLAIN关键字描述了MySQL是如何处理连接这两个表。必须清楚的是,当前设计要求MySQL处理的是country表中的一条记录以及city表中的整个4019条记录。这就意味着,还可使用其他的优化技巧改进其查询方法。例如,给city表添加如下索引(列表D):

  列表 D

  mysql> CREATE INDEX idx_ccode ON city(countrycode);
  Query OK, 4079 rows affected (0.15 sec)
  Records: 4079 Duplicates: 0 Warnings: 0

  现在,当我们重新使用EXPLAIN关键字进行查询时,我们可以看到一个显著的改进(列表E):

  列表 E

以下是引用片段:
  mysql> EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode = country.code AND country.code = 'IND';
  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
  | 1 | SIMPLE | country | const | PRIMARY | PRIMARY | 3 | const | 1 | Using index |
  | 1 | SIMPLE | city | ref | idx_ccode | idx_ccode | 3 | const | 333 | Using where |
  2 rows in set (0.01 sec)

  在这个例子中,MySQL现在只需要扫描city表中的333条记录就可产生一个结果集,其扫描记录数几乎减少了90%!自然,数据库资源的查询速度更快,效率更高。


sqlserver 发表于:2007.06.14 19:53 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(13708次) :: 评论 (0)
===========================================================
优化MySQL数据库查询
===========================================================
任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响。

  如同其它学科,优化查询性能很大程度上决定于开发者的直觉。幸运的是,像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。

  1: 使用索引

  MySQL允许对数据库表进行索引,以此能迅速查找记录,而无需一开始就扫描整个表,由此显著地加快查询速度。每个表最多可以做到16个索引,此外MySQL还支持多列索引及全文检索。

  给表添加一个索引非常简单,只需调用一个CREATE INDEX命令并为索引指定它的域即可。列表A给出了一个例子:

  列表 A

  mysql> CREATE INDEX idx_username ON users(username);
  Query OK, 1 row affected (0.15 sec)
  Records: 1 Duplicates: 0 Warnings: 0

  这里,对users表的username域做索引,以确保在WHERE或者HAVING子句中引用这一域的SELECT查询语句运行速度比没有添加索引时要快。通过SHOW INDEX命令可以查看索引已被创建(列表B)。

  列表 B

  mysql> SHOW INDEX FROM users;
  | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
  | users | 1 | idx_username | 1 | username | A | NULL | NULL | NULL | YES | BTREE | |
  1 row in set (0.00 sec)

  值得注意的是:索引就像一把双刃剑。对表的每一域做索引通常没有必要,且很可能导致运行速度减慢,因为向表中插入或修改数据时,MySQL不得不每次都为这些额外的工作重新建立索引。另一方面,避免对表的每一域做索引同样不是一个非常好的主意,因为在提高插入记录的速度时,导致查询操作的速度减慢。这就需要找到一个平衡点,比如在设计索引系统时,考虑表的主要功能(数据修复及编辑)不失为一种明智的选择。

  2: 优化查询性能

  在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。下面的一个简单例子可以说明(列表C)这一过程:

  列表 C

  mysql> EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode = country.code AND country.code = 'IND';

  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

  | 1 | SIMPLE | country | const | PRIMARY | PRIMARY | 3 | const | 1 | Using index |
  | 1 | SIMPLE | city | ALL | NULL | NULL | NULL | NULL | 4079 | Using where |

  2 rows in set (0.00 sec)这里查询是基于两个表连接。EXPLAIN关键字描述了MySQL是如何处理连接这两个表。必须清楚的是,当前设计要求MySQL处理的是country表中的一条记录以及city表中的整个4019条记录。这就意味着,还可使用其他的优化技巧改进其查询方法。例如,给city表添加如下索引(列表D):

  列表 D

  mysql> CREATE INDEX idx_ccode ON city(countrycode);
  Query OK, 4079 rows affected (0.15 sec)
  Records: 4079 Duplicates: 0 Warnings: 0

  现在,当我们重新使用EXPLAIN关键字进行查询时,我们可以看到一个显著的改进(列表E):

  列表 E

以下是引用片段:
  mysql> EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode = country.code AND country.code = 'IND';
  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
  | 1 | SIMPLE | country | const | PRIMARY | PRIMARY | 3 | const | 1 | Using index |
  | 1 | SIMPLE | city | ref | idx_ccode | idx_ccode | 3 | const | 333 | Using where |
  2 rows in set (0.01 sec)

  在这个例子中,MySQL现在只需要扫描city表中的333条记录就可产生一个结果集,其扫描记录数几乎减少了90%!自然,数据库资源的查询速度更快,效率更高。


sqlserver 发表于:2007.06.14 19:53 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(1279次) :: 评论 (1)
===========================================================
如何缩小SQL Server数据库日志文件
===========================================================
数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL Server的一个BUG吧。

  专家解答:找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可。

  SET NOCOUNT ON
  DECLARE @LogicalFileName sysname,
  @MaxMinutes INT,
  @NewSize INT
  USE Marias
  -- 要操作的数据库名
  SELECT @LogicalFileName = 'Marias_log'
  -- 日志文件名
  @MaxMinutes = 10,
  -- Limit on time allowed to wrap log.
  @NewSize = 100
  -- 你想设定的日志文件的大小(M)
  -- Setup / initialize
  DECLARE @OriginalSize int
  SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
  SELECT 'Original Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)
  DECLARE @Counter INT,
  @StartTime DATETIME,
  @TruncLog VARCHAR(255)
  SELECT @StartTime = GETDATE(),
  @TruncLog = 'BACKUP LOG '
  + db_name() + ' WITH TRUNCATE_ONLY'
  DBCC SHRINKFILE (@LogicalFileName, @NewSize)
  EXEC (@TruncLog)
  -- Wrap the log if necessary.
  WHILE @MaxMinutes > DATEDIFF
  (mi, @StartTime, GETDATE()) -- time has not expired
  AND @OriginalSize = (SELECT size
  FROM sysfiles WHERE name = @LogicalFileName)
  AND (@OriginalSize * 8 /1024) > @NewSize
  BEGIN -- Outer loop.
  SELECT @Counter = 0
  WHILE ((@Counter < @OriginalSize / 16)
  AND (@Counter < 50000))
  BEGIN -- update
  INSERT DummyTrans VALUES ('Fill Log')
  DELETE DummyTrans
  SELECT @Counter = @Counter + 1
  END
  EXEC (@TruncLog)
  END
  SELECT 'Final Size of ' + db_name() + ' LOG is ' +
  CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
  FROM sysfiles
  WHERE name = @LogicalFileName
  DROP TABLE DummyTrans
  SET NOCOUNT OFF


sqlserver 发表于:2007.06.14 19:46 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(79247次) :: 评论 (3)
===========================================================
PL/XML—PL/SQL基于XML的脚本分析
===========================================================

  我对这个观念稍微进行了一下扩张,最终得到一个可以XML中执行的脚本语言,它可以提交给一个PL/SQL过程。这个脚本能够执行存储过程;它拥有循环逻辑、条件(CASE)逻辑、用户定义的变量等。

  它的优点在于,它阅读和修改起来都十分方便。XML结构也十分易于阅读。它是一个优秀的学习工具,但也具有一些现实的用途。你只需修改XML就可以动态更改应用程序的功能。

  你甚至可以编写一个程序,它能够为你生成XML,然后应用于其它系统中。相当的棒!

  以下是一段样本脚本:



MyValue









$var1$ is $var2$




  将这段脚本在我的脚本解释器中运行,会得到以下输出结果:

  MyValue is 25/08/2006 15:06:59
  MyValue is 25/08/2006 15:06:59
  MyValue is 25/08/2006 15:06:59
  MyValue is 25/08/2006 15:06:59
  MyValue is 25/08/2006 15:06:59

  这段脚本连续运行。因此首先它宣称一个变量$var1$并指定其值为“MyValue”。

  下一个命令也是一个变量$var2$,但它的值指定给一段文字,它从函数to_char(sysdate)获得它的值。

  接下来的命令是一个for循环。它将循环1到5次,每个循环执行一次过程。在本例中,它打印出$var1$和$var2$的值,并将它们用“is”隔开。

  过程和函数可以随意使用参数。函数和过程的所有参数都必须加以命名。你必须了解并给出参数名。

  变量能够以任何形式命名,但必须包含在$中。在我的例子中,我选择用$var1$和$var2$作标准。我还可以把它们命名为$boogabooga1$和$kerplump2$。

  由于它涉及这么多的概念,我认为这是一个优秀的学习工具。现在这段代码存在三个问题。首先,除注释以外没有文档;根本没有异常处理,也没有说明或调试代码。

  我还没有决定如何处理异常。应该由注释器处理异常,还是让它们不断繁殖呢?我需要编写一个不太显眼的调试过程,它能够随意地输出过程的每个步骤。

另外一件你需要考虑的事情是,它旨在用于程序间或由开发者访问。你不希望在网络或其它地方传播。那无疑会造成一个安全问题。如果你准备使用这段脚本,考虑将其纳入调用者的权限包中。我会不时考虑它的安全情况。这个问题需要小心对待。

  如果你感到好奇,PL/XML代码包括:

  •   包变量
  •   私有包变量
  •   记录类型
  •   记录表
  •   关联数组
  •   过程多重定义
  •   XMLType
  •   XPath
  •   XSLT
  •   循环
  •   FOR循环
  •   CASE
  •   动态SQL
  •   数据驱动编程
  •   字符串处理
  •   递归编程

  所有这些都包含在大约500行代码中(包括空白和注释)。

  这样编程确实很有趣。总共用了大约4个小时的时间。

  以下是一个更加全面的例子,它说明了许多功能。

  这个XML:





MyValue


01-JAN-2005


1999




$var1$
def




$var1$
def








Hello World!








Condition: 1=2






Condition: 1=1






Condition: 1=3






$var4$




TO_CHAR(sysdate)








$var5$


给定这些测试过程:

  CREATE OR REPLACE PROCEDURE test_proc( parm1 IN VARCHAR2, parm2 IN VARCHAR2 )
  IS
  BEGIN
  DBMS_OUTPUT.PUT_LINE( 'Out: ' || parm1 || parm2 );
  END;
  CREATE OR REPLACE FUNCTION test_func( parm1 IN VARCHAR2, parm2 IN VARCHAR2 )
  RETURN VARCHAR2
  IS
  BEGIN
  RETURN 'Data: ' || parm1 || '|' || parm2;
  END;
  CREATE OR REPLACE FUNCTION test_date_func
  RETURN DATE
  IS
  BEGIN
  RETURN sysdate;
  END;

  生成以下结果:

  Out: MyValuedef
  Out: MyValuedef
  Out: MyValuedef
  Hello World!
  Hello World!
  Hello World!
  Hello World!
  Hello World!
  Condition: 1=1
  Data: MyValue|def
  25-AUG-06
  25-AUG-06

  我正在发布这段脚本的开源代码,以便你可以在适当的地方使用它。你可以在Freshmeat.net订阅,并在我更新代码时得到通知;或访问http://code.google.com/p/pl-xml/获取PL/XML的源代码。


sqlserver 发表于:2007.06.14 19:43 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(1897次) :: 评论 (0)
===========================================================
SQL Server安全设计
===========================================================

开发人员和管理人员通常不断地考虑程序安全问题的策略──添加安全措施不再是一个可以完全接收的方法。程序的安全问题必须从设计的开始就得考虑,并贯穿开发的整个过程。以后如果要开发一个SQL Server的数据库,你一定要从开始就遵循这些安全设计规则。

 查看全文
sqlserver 发表于:2006.08.07 16:02 ::分类: ( SQL Server数据库管理技术 ) ::阅读:(103391次) :: 评论 (250)
===========================================================
SQL Server 数据库管理常用的SQL和T-SQL语句
===========================================================
文章主要介绍了SQL Server 数据库管理常用的SQL和T-SQL语句。 查看全文
sqlserver 发表于:2006.08.07 15:23 ::分类: ( SQL Server数据库管理技术 ) ::阅读:(9841次) :: 评论 (3)
===========================================================
利用同义词简化SQL Server 2005开发
===========================================================
文章中主要介绍了如何利用同义词简化SQL Server 2005开发。 查看全文
sqlserver 发表于:2006.08.07 15:21 ::分类: ( SQL Server数据库开发技术 ) ::阅读:(2088次) :: 评论 (2)
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
网站链接...