Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何通过数据类型转换和值操作从另一个表插入到一个表中_Sql_Sql Insert - Fatal编程技术网

Sql 如何通过数据类型转换和值操作从另一个表插入到一个表中

Sql 如何通过数据类型转换和值操作从另一个表插入到一个表中,sql,sql-insert,Sql,Sql Insert,我需要编写一个查询,将数据从TableA插入TableB 如果表B中已存在数据,请不要插入它 TableA是一个表,其中包含使用SSIS包导入的数据,所有字段均为varchar数据类型 TableB是一个具有不同数据类型字段的表 执行insert时,我需要将数据从TableA插入TableB,确保TableB的数据格式正确 这是一个TableA,其中数据以SSIS的形式导入为varchar键入所有内容: 这是表B的结构: 我正在编写以下查询: insert into TableB(Date,

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

如果表B中已存在数据,请不要插入它

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

TableB是一个具有不同数据类型字段的表

执行insert时,我需要将数据从
TableA
插入
TableB
,确保
TableB
的数据格式正确

这是一个
TableA
,其中数据以
SSIS
的形式导入为
varchar
键入所有内容:

这是表B的结构:

我正在编写以下查询:

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
yyyym
表B中的
yyyym
列应包含
yyyym
数据,其中
YYYY
是当前年份,
MM
是当前月份

例如:

year(GetDate()) = 2015
month(GetDate()) = 7
我在找201507

因此,在查询成功执行后,表B如下所示:

我的查询某处出错,执行时出现以下错误:

Msg 102,15级,状态1,第1行“id”附近语法不正确。味精 102,15级,状态1,第4行“YYYYMM”附近语法不正确


正确的方法是什么?

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

convert(varchar(4), year(getdate())) + convert(varchar(2), 
month(getdate()))
相反,只需添加int:

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

您引用的别名
tt
,以前在任何地方都没有定义。我更新了SQL语句。因此,datepart返回的数据类型基本上是整数?那么
convert(char(6),getDate(),112)
呢?如果使用这种方法,如果需要将结果与整数字段进行比较,是否应该将其转换为整数?你只是自找麻烦。当int使用较少的数据时,为什么要转到char呢。convert(char(6),getDate(),112)可以输出给用户。但如果是表插入,则使用整数。如果您需要比较,我会将int转换为char,而不是char转换为int。这样可以减少错误。谢谢您的解释