2015-07-08 3 views
0

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

Если данные уже существуют в TableB, не вставляйте их.

TableA - это таблица с данными, импортированными с использованием SSIS пакета со всеми полями типа данных varchar.

ТаблицаB представляет собой таблицу с полями разных типов данных.

При вставке мне нужно вставить данные из TableA в TableB, убедившись, что TableB получает свои данные в правильном формате.

Это TableA с данными, импортированными в SSIS как varchar типа все:

enter image description here

Это структура TableB:

enter image description here

Я пишу следующий запрос :

insert into 
TableB(Date,Receipt,Description,CardMember,AccountNumber,Amount,YYYYMM) 
select Date,Receipt,Description,CardMember,AccountNumber,Amount, 
convert(varchar(4), year(getdate())) + convert(varchar(2), 
month(getdate())) from TableA a 
where not exists(select 1 from TableB b where 
b.CardMember = a.CardMember) and (convert(varchar(4), year(getdate())) 
+ convert(varchar(2), month(getdate()))) = b.YYYYMM 

YYYYMM колонок в TableB должен содержать YYYYMM данных, где YYYY является текущим годом и MM является текущим месяцем.

Например:

year(GetDate()) = 2015 
month(GetDate()) = 7 

Я ищу 201507

Итак, после того, как запрос будет успешно выполнен, я TableB глядя, как это:

enter image description here

Мои запрос где-то не так, и при его выполнении у меня возникает следующая ошибка:

Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'id'. Msg 102, Level 15, State 1, Line 4 Incorrect syntax near 'YYYYMM'.

Каков правильный способ?

+0

Вы ссылаетесь псевдоним 'tt', который не был определен в любом месте ранее. – Siyual

+0

Я обновил инструкцию SQL. – gene

ответ

2

Последнее поле является int. Не используйте функции VARCHAR, чтобы заполнить его, как у вас есть:

convert(varchar(4), year(getdate())) + convert(varchar(2), 
month(getdate())) 

Вместо этого просто добавьте Интс:

datepart(yyyy,getdate())*100 + datepart(mm,getdate()) 
+0

так, в принципе, тип данных, возвращаемый datepart, является целым числом? – gene

+0

есть. Правильно. https://msdn.microsoft.com/en-us/library/ms174420.aspx –

+0

Что насчет 'convert (char (6), getDate(), 112)'? Если этот способ используется, следует ли преобразовать его в целое число, если мне нужно сравнить результат с целым полем? – gene

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