繁体   English   中英

如何在SQL Server中实现Used()

[英]How to Implement Used() in SQL Server

请关注这个foxpro对sql server迁移的要求..

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

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

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

假设我的登录有权访问两个数据库,TestA和TestB。 两个数据库都包含表MyData,每个表包含不同的数据(A数据和B数据)。 当我登录时,我的上下文被设置为一个数据库,让我们说TestA。 如果我SELECT * from MyData运行SELECT * from MyData ,我将从数据库TestA获取该表的内容。 如果我想从TestB获取数据,我要么必须SELECT * from TestB.dbo.MyDta运行SELECT * from TestB.dbo.MyDta - 指定数据库我从中获取数据 - 或者我必须更改数据库的上下文; 以编程方式,这是使用Use命令完成的,例如`USE TestB'。

这是对“它是如何工作”的非常简单的描述。 这是所有编程,这意味着有许多方法可以执行给定的操作,具体取决于您使用的工具(应用程序)和您要实现的任务。 我强烈建议您阅读SQL Books Online中的所有内容,SQL Server附带的文档 - Microsoft在记录此产品方面做得非常好。

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

如果您确实要复制/移动到其他位置甚至是其他服务器,则必须分离释放句柄的“数据库”,您可以执行任何操作。

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

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

只要数据库附加,你就应该好好去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM