如何使用数据类型转换和值操作从另一个表插入一个表

时间:2015-07-08 15:19:43

标签: sql sql-insert

我需要编写一个查询,将数据从TableB插入TableA

如果TableB中已存在数据,请勿插入。

TableA是一个表,其中使用SSIS包导入数据,所有字段均为varchar数据类型。

TableB是一个包含不同数据类型字段的表。

进行插入时,我需要将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语法不正确' id'。消息   102,Level 15,State 1,Line 4语法不正确' YYYYMM'。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

最后一个字段是int。不要像使用varchar函数那样填充它:

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

相反,只需添加整数:

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