2014-12-27 128 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?