Как создать хранимую процедуру, которая извлекает данные из нескольких таблиц, которые не связаны Что мне делать - PullRequest
0 голосов
/ 02 февраля 2009

Мне нужно создать хранимую процедуру, которая извлекает данные из нескольких несвязанных таблиц. Что мне делать? .

ПОЖАЛУЙСТА, ПОМОГИТЕ МОЙ ЖИЗНЬ, ЗАВИСИТ ОТ ЭТОГО

Ответы [ 6 ]

2 голосов
/ 02 февраля 2009

Просто сделать несколько выборов?

select * from MyTable1;
select * from MyTable2;
select * from MyTable3;

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

Если вы имеете в виду, что у вас есть строки в нескольких таблицах, и вы хотите вернуть их все обратно, то вы можете сделать это, выполнив UNION.

0 голосов
/ 02 февраля 2009
SELECT Field1, Field2, Field3 FROM Table1 
UNION ALL
SELECT F1, F2, F3 FROM Table2 
UNION ALL 
SELECT Fld1, Fld2, Fld3 FROM Table3;

Это вытащит все данные из всех трех таблиц в один вывод. Убедитесь, что другие поля таблицы соответствуют типу первой таблицы, и все готово.

0 голосов
/ 02 февраля 2009

Наличие или отсутствие первичных или внешних ключей не мешает вам присоединиться к таблицам. (Это не будет особенно быстро, но вы можете сделать это.) Они также не существуют в отдельных экземплярах базы данных.

Вы говорите, что ваши базы данных не связаны. Из этого я должен сделать вывод, что база данных, в которой вы пишете хранимую процедуру, скорее всего, не имеет доступа ко второй базе данных; если это так, вы все равно не сможете получить к нему доступ. Вам необходимо добавить ссылку на 2-ю базу данных с помощью Enterprise Manager.

Как только вы это сделаете, вы можете ссылаться на таблицы во 2-й базе данных, используя ее имя схемы, как показано ниже:

SELECT *
FROM foo.employees

где foo - имя схемы.

Удачи.

0 голосов
/ 02 февраля 2009

Ваши вопросы не ясны, но если вы пытаетесь извлечь только определенные вещи из определенных таблиц и затем вернуть их пользователю, можете сделать что-то вроде этого:

CREATE PROCEDURE spMyTestProc 
AS

        DECLARE @F1 int
        DECLARE @F2 int
        DECLARE @F3 int
        DECLARE @f4 char(10)

        SELECT @f1 = FIELD1 from MYTABLE1

        SELECT @F2 = FIELD2 FROM MYTABLE2

        SELECT @F3 = FIELD3, @F4=FIELD4 FROM MYTABLE3


    /* NOW return the result set to the user, it'll come back just like a regular select */    
        SELECT @F1 AS F1, @F2 AS F2, @F3 AS F3, @F4=F4
0 голосов
/ 02 февраля 2009

Если вам нужен один набор результатов, вы можете использовать ключевое слово JOIN независимо от того, определены ли в таблицах отношения внешних ключей; просто укажите, к каким столбцам вы хотите присоединиться к таблицам.

Кроме того, вы можете использовать несколько наборов результатов и просто иметь несколько операторов SELECT.

0 голосов
/ 02 февраля 2009

Что вы подразумеваете под «не связаны»? Они на одном экземпляре сервера sql? Если это так, просто выберите из полного имени схемы.

Например.

Выберите * из базы данных1.dbo.table Выберите * из базы данных2.dbo.table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...