无法向现有表添加列

时间:2015-04-23 13:40:40

标签: sql sql-server

我有一张桌子。有三列的费用在

之下
ExpenseId int NOT NULL,
ExpenseName varchar(50) NOT NULL,
Invalid bit NOT NULL

要添加新列(OldCode char(4) not null),我在Microsoft SQL Server Management Studio中使用了表的设计功能。但我得到以下错误

  

'费用'表
   - 无法修改表格。无法将值NULL插入列' OldCode',table' TransportSystemMaster.dbo.Tmp_Expenses&#39 ;;列不允许空值。 INSERT失败。声明已经终止。

顺便说一句,我已经能够将具有相同规范的相同列添加到同一数据库的其他表中。

任何帮助?

4 个答案:

答案 0 :(得分:8)

您的表包含现有记录

您正在推送NOT NULL类型的新列。

因此对于较旧的记录,数据必须是某种东西。

尝试这样的事情

ALTER TABLE MY_TABLE ADD Column_name INT NULL
GO
UPDATE MY_TABLE <set valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN Column_name INT NOT NULL
 GO

答案 1 :(得分:3)

由于OldCodeNOT NULL,您应为其指定默认值。

答案 2 :(得分:3)

如果您的桌子上有一些行,则无法添加不可为空的列,您应为其提供默认值

def _datetime(date_str):
    r=datetime.strftime(datetime.strptime(date_str,'%a %b %d %H:%M:%S +0000 %Y'),'%Y-%m-%d %H:%M:%S')
    return r

if __name__ == '__main__':

    fp = open( 'csk.csv', 'rb' )
    reader = csv.reader( fp, delimiter=',', quotechar='"', escapechar='\\' )

    c=''
    a=[]
    sent=[]
    dates=[]
    for row in reader:
        c=row[1] #twitter datetime in these format Wed Apr 22 14:29:00 +0000 2015
        b=_datetime(c)
        a.append(b)        
    print a

答案 3 :(得分:1)

您必须为表的所有4个字段指定值,这纯粹是因为,在设计表时,您将列的定义设置为非null。您再次添加一个名为OldCode的新列并设置为非null,所有现成的记录都没有值。这就是它抱怨的原因