2015-09-26 2 views
1

Я работаю над БД доступа, которые имеют связанную с ODBC таблицу SQL Server и локальную таблицу, и у меня есть следующий скрипт tsql (как скрипт VB) в Access DB. Мне интересно, может ли запрос tsql состоять из одной связанной таблицы и одной локальной таблицы Access, а не из связанных таблиц. Я знаю, что SQL Server ничего не знает о моих локальных данных, но мне просто интересно, может ли эта кодировка работать или нет. Если да, как следует изменить следующие коды? Если нет, значит, мне нужно сначала перенести локальную таблицу на SQL Server? Цените, если кто-то может посоветовать. Большое спасибо.Возможно, для сквозного запроса T-SQL в Access для включения локальной таблицы доступа?

Следующий раздел пытается обновить связанную таблицу из локальной таблицы.

qryd.SQL = " 
UPDATE dbo.linked_table 
SET dbo.linked_table.field = '" & [local_access_table]![access_field] & "' 
FROM dbo.linked_table 
INNER JOIN " & [local_access_table] & " 
ON ('" & [local_access_table]![access_field] & "' = dbo.linked_table.field) 
WHERE dbo.linked_table.field = 'value' 
" 

ИЛИ наоборот, в этом разделе ниже предлагается обновить локальную таблицу из связанной таблицы.

qryd.SQL = " 
UPDATE " & [local_access_table] & " 
SET '" & [local_access_table]![access_field] & "' = dbo.linked_table.field 
FROM " & [local_access_table] & " 
INNER JOIN dbo.linked_table 
ON (dbo.linked_table.field = '" & [local_access_table]![access_field] & "') 
WHERE '" & [local_access_table]![access_field] & "' = 'value' 
" 

Возможно, мое отношение слишком сильно зависит от доступа, поэтому у меня есть другой подобный вопрос. В Access запрос выбора (созданный в локальном доступе) может быть легко включен в другой запрос Access, мне интересно, можно ли применить эту концепцию к запросу tsql? Возьмите это в качестве примера.

qryd.SQL = " 
UPDATE dbo.linked_table 
SET dbo.linked_table.field = '" & [local_access_query]![query_field] & "' 
FROM dbo.linked_table 
INNER JOIN " & [local_access_query] & " 
ON ('" & [local_access_query]![query_field] & "' = dbo.linked_table.field) 
WHERE dbo.linked_table.field = 'value' 
" 

Большое спасибо!

+0

Прежде всего, знаете ли вы, что «T-SQL» («Transact-SQL») является диалектом SQL, который работает на Microsoft SQL Server, «Access SQL» - это диалект, который использует механизм доступа к базе данных, и что Они не одинаковы? –

+0

Привет @GordThompson, спасибо за комментарий и помощь. Да, я знаю, что T-SQL должен запускаться на SQL Server и отличается от Access SQL. Хотя у меня есть некоторый базовый опыт в Access в течение нескольких лет, но я совершенно не знаком с T-SQL, SQL Server и VB, поэтому я не знаю, сколько они могут работать в Access, когда T-SQL закодирован с помощью VB. Благодарю. – Will

+0

Что вы подразумеваете под: «У меня есть следующий скрипт tsql (как скрипт VB) в Access DB»? Хотя связанная база программирования, Access VBA обрабатывается иначе, чем VB или VB-скрипт. Например, код обычно запускается через объекты Access (формы, запросы, отчеты), а не напрямую запускается через консоль. Является ли TSQL внешним и называется Access? Или это код в модуле доступа VBA? Или за форму или отчет? – Parfait

ответ

3

Да, технически возможно сделать таблицы доступа и представления доступными для кода T-SQL, запущенного на экземпляре SQL Server. Это может быть сделано путем настройки конфигурации SQL Server, а затем

  1. добавления базы данных Access в качестве «связанного сервера» в SQL Server, или
  2. с использованием OPENROWSET() в коде T-SQL стереосистеме и обновите на SQL Server.

Однако эти подходы редко используются в системах производства, так как настроек SQL Server требуется (подробности here) потенциально может привести к снижению производительности и стабильности самого экземпляра SQL Server, а также потому, что в результате Т-SQL-код может столкнуться «проблемы» производительности, аналогичные тем, с которыми сталкиваются SQL-запросы Access, которые используют связанные таблицы ODBC.

На мой взгляд, если существует реальная и постоянная необходимость использования конкретной таблицы в процессах, выполняемых на SQL Server, тогда таблица должна находиться на SQL Server. Любые процессы доступа, которые должны работать с этой таблицей, все равно могут сделать это, используя связанную с ODBC таблицу.

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