2014-12-27 126 views
-2

我正在尝试在Projectdetails中创建一列EAC。 表1:Projectdetails] 表2: 'RAC']插入并选择

(SELECT b.[EAC] FROM [dbo].[Projectdetails] a 
    INNER JOIN [dbo].['RAC'] b ON a.[ProjectKey]= b.[Project _ID]) 

正常工作并返回我421行。

但是下面的查询不起作用:

Insert into [dbo].[Projectdetails]([EAC]) 
    (SELECT b.[EAC] FROM [dbo].[Projectdetails] a 
    INNER JOIN [dbo].['RAC'] b ON a.[ProjectKey]= b.[Project _ID]) 

返回我不能插入NULL值插入列ProjectKey

+0

只是可以肯定我的理解 - 你试图添加和填充'EAC'列到现有的行,对不对? – Mureinik 2014-12-27 16:10:04

+0

尝试运行'(SELECT b。[EAC] FROM [dbo]。[Projectdetails] a INNER JOIN [dbo]。['RAC'] b ON a。[ProjectKey] = b。[Project _ID] WHERE b.EAC IS NULL)'。如果您发现至少有一条记录,那么就有您的问题 – dotnetom 2014-12-27 16:10:15

回答

0

我怀疑你真的想要一个update

update pd 
    set EAC = r.EAC 
    from [dbo].[Projectdetails] pd join 
     [dbo].['RAC'] r 
     on pd.[ProjectKey] = r.[Project _ID]); 

由将单引号放在表名中似乎是一个非常糟糕的主意。

+0

消息8152,级别16,状态2,行1 字符串或二进制数据将被截断。 该声明已被终止。 – SunnyKP 2014-12-27 16:23:28

+0

@SunnyKP。 。 。您需要检查两个“EAC”列的数据类型。看起来它们是不同的。当一个表中的值不适合另一个表时,您必须决定如何处理。 – 2014-12-27 17:01:49

+0

这段代码有帮助。数据类型是不同的,当我把它们放在相同的地方并修复它们。 – SunnyKP 2014-12-27 17:15:49

0

我猜,ProjectKey是一个主键,因为它不是NULL。因此,当您尝试在此表中插入新行而没有为此列提供任何特定的 值时, 正在尝试将NULL作为缺省值 值添加。但是,因为这是NOT NULL列,所以它会给你错误。

使其工作的最佳解决方案是将此列作为 自动增量列。像这样

Sql Server add auto increment primary key to existing table

SQL Server, How to set auto increment after creating a table without data loss?