2012-06-15 2 views
0

Пожалуйста asssit на этом FoxPro в SQL требования миграции сервера ..Как Реализовать Used() в SQL Server

я эта функция USED() в FoxPro, который определяет, будет ли таблица открыта в рабочей зоне. Есть ли такая функция в SQL Server, которая выполняет ту же работу?

+1

В SQL Server нет понятия «рабочая область». Если вы не хотите, чтобы вы хотели узнать, когда другой сеанс читает или записывает в таблицу ... в этом случае вам нужно посмотреть 'sp_lock' и' sp_who2'. – bluevector

+0

У вас нет одинаковых соображений в SQL Server. Вместо этого на каждой сессии должны использоваться подсказки TRANSACTION и LOCKing для защиты их собственной активности. Если вы объясните сценарии, которые вы хотите защитить, и почему, тогда мы можем посоветовать, как, или даже если вам нужно вообще. – MatBailie

+0

@Dems, вот сценарий .. FoxPro если используется ('TableName')
ВЫБОР имя_таблицы
SET ORDER TO tablename.name ELSE
USE имя_таблицы IN 0 ORDER имя
ENDIF – rock

ответ

1

Я переехал из 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 очень хорошо документировала этот продукт.

+0

Спасибо за информацию Philip! Я не новичок в SQL, но новичок в старой FoxPro .., поэтому найти его в два раза сложнее перенести на SQL! – rock

1

Филипп прав относительно всего, что «открыто» в SQL. Однако, я думаю, я бы сказал это несколько иначе.Когда SQL-сервер работает (поскольку он обычно является автоматическим сервисом, который запускается при запуске самого сервера), ЛЮБАЯ «база данных», которая была «прикреплена», доступна для запроса и в основном неприкосновенна от ОС в другом месте, поскольку SQL имеет открыть «дескриптор» файла, тем самым предотвращая копирование, удаление, перемещение и т. д.

Если вы хотите скопировать/переместить в другое место или даже на другой сервер, вам придется отделить «базу данных», которая выпускает ручку, и вы можете делать что угодно.

Что вы можете сделать в SQL-Server. Вы даже не должны открыть базу данных в явном виде, но может претендовать на ваши вопросы по database.table ссылки ... такие как

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

Пока прилагается база данных, вы должны быть хорошо идти.

+0

Спасибо, DRapp! Я просто опустил USED() в foxpro, переписывая это sp на sql .. Это сработало отлично! – rock

+0

@ranjith, рад помочь ... Просто FYI. Являясь новичком, если вы не начинаете маркировать соответствующие ответы как «отмеченные пометкой» и выбирая тех, которые помогают, на будущие вопросы может не получиться ответа. Это помогает «поблагодарить» тех, кто публикует ответы, а также помогает другим узнать вопрос, который был решен ... – DRapp

+0

OK DRapp .. Я не знал этого .. Еще раз спасибо! – rock

Смежные вопросы