SQL - где столбец в другом наборе записей из другой базы данных

Я знаком с предложением «IN» в sql, например.

select * from table1 where myfield in (select myfield from table2)

Я сейчас между двумя базами данных! Я хочу выбрать набор записей, в котором телефон находится в другом наборе записей из другой базы данных. Я не работаю напрямую с сервером sql. Вы можете предложить мне более сложный метод с использованием языка на стороне сервера, например. php или asp и т.д.

Мой тест в классическом asp (где connectionObject1 подключается к первой базе данных, а connectionObject2 подключается ко второй базе данных):

sql="select phone from persons"
recordset1.open sql,connectionObject1

sql="select * from persons where phone in ("& recordset1 &")"
recordset2.open sql,connectionObject2

Ошибка выполнения Microsoft VBScript «800a000d»

Несоответствие типов


person Ali Sheikhpour    schedule 22.11.2017    source источник
comment
Эти две базы данных на одном сервере?   -  person Tim Biegeleisen    schedule 22.11.2017
comment
Да, они находятся на одном сервере, и один пользователь имеет доступ к ним обоим. Но мы указали другую базу данных по умолчанию для этих двух объектов подключения.   -  person Ali Sheikhpour    schedule 22.11.2017
comment
Вы можете рассмотреть возможность использования запрос между базами данных, поэтому базы данных можно запрашивать вместе. Вам нужно будет проверить производительность в зависимости от того, сколько данных вы запрашиваете, и других проблем. но тогда результаты, которые вы ищете, будут простым запросом из одной из баз данных, а не манипулированием двумя отдельными результатами.   -  person Tanner    schedule 22.11.2017


Ответы (2)


Ваша ошибка здесь:

sql="select * from persons where phone in ("& recordset1 &")"

Вы пытаетесь объединить строки, но recordset1 — это набор записей, как следует из названия, а не строка.

Я только что посмотрел это. Вы должны иметь возможность преобразовать свой набор записей в строку с помощью GetString таким образом:

sql = "select * from persons where phone in (" & 
        recordset1.GetString(adClipString, -1, ",", ",") &
      ")"

Если телефоны не являются числовыми, вам потребуются дополнительные кавычки:

sql = "select * from persons where phone in (" & 
        "'" &
        recordset1.GetString(adClipString, -1, "','", "','") &
        "'" &
      ")"

Я могу ошибаться с синтаксисом. В этом случае поищите свои документы.

person Thorsten Kettner    schedule 22.11.2017
comment
Это сработало для меня, однако я изменил adClipString на 2, а также ничего не поставил вместо -1. Мне также пришлось удалить последнюю запятую и кавычки с конца строки - person Ali Sheikhpour; 22.11.2017

Используйте полные имена объектов в SQL, это должно работать:

sql="select * from [DB1Name].[SchemaName].persons where phone in (select phone from [DB2Name].[SchemaName].persons)"
person Michał Turczyn    schedule 22.11.2017
comment
Это мило. Вы даже можете сократить это до select * from persons. Однако OP выбирает из двух разных таблиц лиц, находящихся в двух разных базах данных. - person Thorsten Kettner; 22.11.2017
comment
Вы правы, не обратил пристального внимания... Спасибо. - person Michał Turczyn; 22.11.2017