Я переехал из Foxpro в SQL веков назад. Быстрое изложение того, как это работает в SQL Server:
- В SQL Server таблицы и индексы, представления, хранимые процедуры и множество других материалов определяются/создаются в базах данных.
- Вся таблица хранится в одной базе данных; база данных может содержать множество таблиц (и других вещей).
- Все содержимое базы данных хранится в файлах. Файлы не распространяются между базами данных. Для каждой базы данных будет по крайней мере два файла, 1 данные и 1 журнал. (Он может быстро усложняться.)
- Когда база данных «открыта», все ее содержимое (все таблицы, представления и т. Д.) Доступны для использования. Подумайте об этом как Word или Excel: если файл открыт, вы можете работать с ним (и файлы заблокированы и не могут быть изменены с помощью ОС или любого другого приложения); если файлы закрыты, содержимое недоступно, и вы можете удалить или переименовать их. В SQL гораздо эффективнее всегда открывать базы данных.
- SQL имеет лоты контроля доступа и отправлений. Просто потому, что база данных открыта и доступна для использования, это не означает, что любой пользователь может получить к ней доступ. Вход в систему позволяет вам открыть Соединения to SQL; Пользователи определены в базах данных для логинов и используются для управления объектами (таблицами и т. Д.) В базе данных, к которым может иметь доступ данный логин.
- Итак: пользователь или приложение открывает подключение к SQL Server через Login. Входным данным предоставляются права доступа к указанным базам данных и к указанным объектам в этих базах данных. Когда соединение открыто, вы/приложение можете получить доступ ко всему, что захочет. Однако:
- Каждое соединение имеет контекст текущей базы данных и может очень сильно напоминать команду Foxpro
USE
. Ниже приводятся примеры.
Скажите, что мой логин имеет доступ к двум базам данных TestA и TestB. Обе базы данных содержат таблицу MyData, и каждая таблица содержит разные данные (данные и данные B). Когда я вхожу в систему, мой контекст устанавливается в одну базу данных, скажем, TestA. Если я запустил SELECT * from MyData
, я получу содержимое этой таблицы из базы данных TestA. Если бы я хотел получить данные из TestB, мне бы пришлось либо запустить SELECT * from TestB.dbo.MyDta
- указав базу данных, в которой я получаю данные, либо мне пришлось бы менять контекст базы данных; программно, это делается с помощью команды , например, с помощью команды. `USE TestB '.
Это очень упрощенное описание «как это работает». Это все программирование, что означает, что существует множество способов выполнить определенное действие, в зависимости от используемых вами инструментов (приложений) и задач, которые вы пытаетесь достичь. Я настоятельно рекомендую читать, ну, все в SQL Books Online, документации, поставляемой с SQL Server - Microsoft очень хорошо документировала этот продукт.
В SQL Server нет понятия «рабочая область». Если вы не хотите, чтобы вы хотели узнать, когда другой сеанс читает или записывает в таблицу ... в этом случае вам нужно посмотреть 'sp_lock' и' sp_who2'. – bluevector
У вас нет одинаковых соображений в SQL Server. Вместо этого на каждой сессии должны использоваться подсказки TRANSACTION и LOCKing для защиты их собственной активности. Если вы объясните сценарии, которые вы хотите защитить, и почему, тогда мы можем посоветовать, как, или даже если вам нужно вообще. – MatBailie
@Dems, вот сценарий .. FoxPro если используется ('TableName')
ВЫБОР имя_таблицы
SET ORDER TO tablename.name ELSE
USE имя_таблицы IN 0 ORDER имя
ENDIF – rock