0

请协助这个 foxpro 到 sql server 迁移要求..

我在 foxpro 中有这个函数 USED() ,它确定一个表是否在工作区中打开。SQL Server 中是否有任何此类功能可以完成相同的工作?

4

2 回答 2

1

我很久以前就从 Foxpro 搬到了 SQL。快速了解它在 SQL Server 中的工作原理:

  • 在 SQL Server 中,表(以及索引、视图、存储过程和其他东西的负载)是在数据库中定义/创建的。
  • 整个表存储在单个数据库中;一个数据库可以包含很多表(和其他东西)。
  • 数据库的所有内容都存储在文件中。文件不跨数据库共享。每个数据库至少有两个文件,1 个数据和 1 个日志。(它会很快变得复杂。)
  • 当数据库“打开”时,其所有内容(所有表、视图等)都可供使用。把它想象成 Word 或 Excel:如果文件打开了,您就可以使用它(文件被锁定,无法通过操作系统或任何其他应用程序修改);如果文件已关闭,则内容无法访问,您可以删除或重命名它们。在 SQL 中,始终保持数据库打开的效率要高得多。
  • SQL 有很多访问和权限控制。仅仅因为数据库是开放的并且可以使用并不意味着任何人都可以访问它。登录允许您打开SQL连接;用户是在数据库中为登录定义的,用于控制给定登录可以访问数据库中的哪些对象(表等)。
  • 所以:用户或应用程序通过登录打开与 SQL Server 的连接。登录被授予对指定数据库以及这些数据库中指定对象的访问权限。连接打开后,您/应用程序可以访问他们想要的任何内容。然而:
  • 每个连接都有一个“当前数据库”上下文,感觉很像 FoxproUSE命令。示例如下。

假设我的登录名可以访问两个数据库,TestA 和 TestB。两个数据库都包含表 My​​Data,每个表包含不同的数据(A 数据和 B 数据)。当我登录时,我的上下文被设置为一个数据库,比如说 TestA。如果我运行SELECT * from MyData,我将从数据库 TestA 中获取该表的内容。如果我想从 TestB 获取数据,我要么必须运行SELECT * from TestB.dbo.MyDta——指定我从中获取数据的数据库——要么我必须更改数据库的上下文;以编程方式,这是通过使用命令完成的,例如“USE TestB”。

这是对“它是如何工作的”的非常简单的描述。这都是编程,这意味着有几十种方法可以执行给定的操作,具体取决于您使用的工具(应用程序)和您想要完成的任务。我强烈建议阅读 SQL 联机丛书中的所有内容,SQL Server 附带的文档——微软在记录这个产品方面做得非常好。

于 2012-06-15T13:53:23.907 回答
1

菲利普关于在 SQL 中“开放”的一切都是正确的。但是,我想我会以不同的方式表达它。当 SQL-Server 运行时(因为它通常是在服务器本身启动时启动的自动化服务),任何已“附加”的“数据库”都可用于查询,并且基本上无法从其他任何地方的操作系统访问,因为 SQL 具有打开文件的“句柄”,从而防止复制、删除、移动等......

如果您确实想复制/移动到其他位置甚至另一台服务器,则必须分离释放句柄的“数据库”,您可以做任何事情。

至于你可以在 SQL-Server 中做什么。您甚至不必显式打开数据库,但可以通过 database.table 引用限定您的查询......例如

select t1.field
   from YourDatabase.SomeTable t1
   where t1.SomeField = ?whatever

As long as the database is attached, you should be good to go.

于 2012-06-16T12:48:17.883 回答