2012-06-28 1 views
0

Я столкнулся с этой ситуацией при переносе нашей базы данных из Foxpro в SQL.Как использовать поле (столбец) одной переменной таблицы в другой переменной таблицы

Ниже приведен пример сценария .. (мой исходный код немного сложнее, так просто пытался создать свой собственный пример)

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

DECLARE @temp_1 TABLE(ID INT, 
Name NCHAR(7), 
bday DATE, 
m_status NVARCHAR(10)); 

INSERT INTO @temp_1 
SELECT Name, bday, m_status from Employee_Info 


DECLARE @temp_2 TABLE(ID INT, 
City NCHAR(7), 
Country NVARCHAR(10), 
zip NVARCHAR(10)); 

INSERT INTO @temp_2 
SELECT City, Country, zip from Employee_Address 

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

Например,

DECLARE @temp_full TABLE (
Name NCHAR(7), 
City NCHAR(7)); 

INSERT INTO @temp_full 
SELECT @temp_1.Name, @temp_2.City FROM @temp_1, @temp_2 WHERE @temp_1.ID = @temp_2.ID 

[EDITED TO INCLUDE INSERT USING JOINS] 

INSERT INTO @temp_full 
SELECT @temp_1.Name, @temp_2.City FROM @temp_1 INNER JOIN @temp_2 ON @temp_1.ID = @temp_2.ID 

Однако, когда я @ temp_1.Name, @ temp_2.City я получаю ошибку говоря, что я должен delcare скалярную переменную @ temp_1, @ temp_2.

Может кто-нибудь скажет мне, как решить эту проблему.

Благодарим за помощь.

+0

Здесь могут быть и другие проблемы, но пытаетесь ли вы запускать эти запросы по одному за раз или вы работаете одновременно? – jimdrang

+0

Неявная область объединений SQL antipattern. YOu shoudl alwys использует явные объединения. Это 21-й век, и это было добавлено к стандарту ANSII в 1992 году. Не могли бы вы использовать код на другом языке, который был заменен в 1992 году чем-то лучшим? – HLGEM

+0

Разве вы не связываете эти две таблицы, а затем присоединяете temp_1 к temp_2 в своем последнем выборе? – Jerry

ответ

2

Это не foxpro и @variable_tables не являются курсорами, как в foxpro, для таблицы не существует указателя текущей записи, таблицы - это множества записей, и вы должны работать с ним, как с наборами.

Если вам нужно заполнить @temp_full с записями в сочетании с таблицами @ temp_1 и @ temp_2, вы должны использовать выбор с присоединением этой две таблицы, как это:

INSERT INTO @temp_full 
SELECT 
    temp_1.Name, 
    temp_2.City 
FROM @temp_1 temp_1 
JOIN @temp_2 temp_2 on temp_2.ID = temp_1.ID 

Также обратите внимание, что вы должны использовать псевдоним для переменной таблицы

+0

@fanosek .. по какой-то странной причине моя логика не работала, пока я не использовал псевдонимы для моих переменных таблицы. Если я удалю псевдонимы для переменных таблицы, sql throws «должен обработать скалярную переменную @ temp_1, @ temp_2». понять, почему это происходит? Большое спасибо за Вашу помощь ! – rock

+0

Действительно крутая альтернатива ... – DRapp