Sql 为什么可以';我不能在表中插入数据吗?
我用这个创建了一个表Sql 为什么可以';我不能在表中插入数据吗?,sql,sql-server,Sql,Sql Server,我用这个创建了一个表 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[DimRegion]') AND type in (N'U')) DROP TABLE [DimRegion] Go Create Table DimRegion (RegionViewKey int NOT NULL identity Primary Key, RegionVi
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[DimRegion]') AND type in (N'U'))
DROP TABLE [DimRegion]
Go
Create Table DimRegion
(RegionViewKey int NOT NULL identity Primary Key,
RegionView varchar(10),
RegionViewCode varchar(10),
ActiveYear smallint,
SublocationString varchar(7)NULL,
SubLocationCode char(10)NOT NULL,
LocationCode char(10)NULL,
RegionCode char(10)NULL,
RegionGrpCode char(10)NULL,
DivisionCode char(10)NOT NULL,
DivisionGrpCode char(10)NULL,
SubLocationDescription char(50)NULL,
LocationDescription char(50)NULL,
RegionDescription char(50)NULL,
RegionGrpDescription char(50)NULL,
DivisionDescription char(50)NULL,
DivisionGrpDescription char(50)NULL)
我用这个脚本插入了数据
insert into DWResourceTask.dbo.DimRegion --(2013)
Select
'Region1' as RegionView,
'R1' as RegionViewCode,
'2013' as ActiveYear,
sl.sublocationstring,
sl.subLocationCode,
l.locationcode,
r.regioncode,
rg.RegionGrpCode,
d.DivisionCode,
dg.DivisionGrpCode,
sl.SubLocationDescription,
l.LocationDescription,
r.regiondescription,
rg.RegionGrpDescription,
d.divisionDescription,
dg.DivisionGrpDescription
from SCSubLocation sl,
SCLocation l,
SCRegion r,
SCRegionGrp rg,
SCDivision d,
SCDivisionGrp dg
where l.LocationCode = sl.LocationCode
and r.RegionCode = l.RegionCode
and r.RegionGrpCode = rg.RegionGrpCode
and d.divisioncode = rg.divisioncode
and d.divisiongrpcode = dg.divisiongrpcode
但是当我在下面创建这个脚本时,它只会插入新的和最新的数据,它会给我一个错误,比如
味精102,第15级,状态1,第33行“R1”附近的语法不正确 脚本:
insert into DWResourceTask.dbo.DimRegion --(2013)
Select
'Region1' as RegionView,
'R1' as RegionViewCode,
'2013' as ActiveYear,
sl.sublocationstring,
sl.subLocationCode,
l.locationcode,
r.regioncode,
rg.RegionGrpCode,
d.DivisionCode,
dg.DivisionGrpCode,
sl.SubLocationDescription,
l.LocationDescription,
r.regiondescription,
rg.RegionGrpDescription,
d.divisionDescription,
dg.DivisionGrpDescription
from SCSubLocation sl,
SCLocation l,
SCRegion r,
SCRegionGrp rg,
SCDivision d,
SCDivisionGrp dg
where l.LocationCode = sl.LocationCode
and r.RegionCode = l.RegionCode
and r.RegionGrpCode = rg.RegionGrpCode
and d.divisioncode = rg.divisioncode
and d.divisiongrpcode = dg.divisiongrpcode
and not exists(select * from DWResourceTask.dbo.DimRegion x
where(Region1=x.RegionView
R1=x.RegionViewCode
2013=x.ActiveYear
sl.sublocationstring=x.sublocationstring
sl.subLocationCode=x.subLocationCode
l.locationcode=x.locationcode
r.regioncode=x.regioncode
rg.RegionGrpCode=x.RegionGrpCode
d.DivisionCode=x.DivisionCode
dg.DivisionGrpCode=x.DivisionGrpCode
sl.SubLocationDescription=x.SubLocationDescription
l.LocationDescription=x.LocationDescription
r.regiondescription=x.regiondescription
rg.RegionGrpDescription=x.RegionGrpDescription
d.divisionDescription=x.divisionDescription
dg.DivisionGrpDescription=x.DivisionGrpDescription)
)
如何将此脚本固定在只插入最新数据的顶部看起来您的
where
子句缺少条件各部分之间的和s:
...
where(Region1=x.RegionView
AND R1=x.RegionViewCode
AND 2013=x.ActiveYear
AND sl.sublocationstring=x.sublocationstring
AND sl.subLocationCode=x.subLocationCode
AND l.locationcode=x.locationcode
AND r.regioncode=x.regioncode
AND rg.RegionGrpCode=x.RegionGrpCode
AND d.DivisionCode=x.DivisionCode
AND dg.DivisionGrpCode=x.DivisionGrpCode
AND sl.SubLocationDescription=x.SubLocationDescription
AND l.LocationDescription=x.LocationDescription
AND r.regiondescription=x.regiondescription
AND rg.RegionGrpDescription=x.RegionGrpDescription
AND d.divisionDescription=x.divisionDescription
AND dg.DivisionGrpDescription=x.DivisionGrpDescription)
)
谢谢dasblinkenlight。我没有注意到我错过了那些照片。也许我可以先吃点早餐,谢谢dasblinkenlight!提示:不要使用char(50)
-这将创建一个固定长度的列,该列的长度始终为50个字符-无论您在其中存储了什么。无论你储存什么,都会用空格填充到固定长度Char(n)
对于短字符串非常有效,例如代码(例如3位ISO国家代码等)-但对于长字符串则没有用处-请改用varchar(50)
。嗨,marc_,我在创建表时使用的数据类型是基于我们当前ERP系统中现有的源表。感谢你的想法。非常感谢。