在Microsoft SQL Server中,我知道查询是否存在列的默认约束并删除默认约束是:
IF EXISTS(SELECT * FROM sysconstraints
WHERE id=OBJECT_ID('SomeTable')
AND COL_NAME(id,colid)='ColName'
AND OBJECTPROPERTY(constid, 'IsDefaultCnst')=1)
ALTER TABLE SomeTable DROP CONSTRAINT DF_SomeTable_ColName
Run Code Online (Sandbox Code Playgroud)
但由于以前版本的数据库中的拼写错误,约束的名称可能是DF_SomeTable_ColName或DF_SmoeTable_ColName.
如何在没有任何SQL错误的情况下删除默认约束?默认约束名称不会显示在INFORMATION_SCHEMA表中,这会使事情变得有点棘手.
因此,类似于"删除此表/列中的默认约束"或"删除DF_SmoeTable_ColName",但如果无法找到它,则不会出现任何错误.
基本上我在我的EF数据库中有一个表,它具有以下属性:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
它工作正常但是当我将Rating的int更改为double时,我在更新数据库时遇到以下错误:
对象'DF_ Movies _Rating__48CFD27E'取决于列'评级'.ALTER TABLE ALTER COLUMN评级失败,因为一个或多个对象访问此列.
有什么问题?
我有一个表在主键约束中缺少一列.我不想通过SQL Server进行编辑,而是将其放在一个脚本中,以将其添加为更新脚本的一部分.
我可以使用什么语法来执行此操作?我必须放弃并重新创建关键约束吗?
我正在尝试在SQL中创建升级和回退脚本.升级脚本添加如下列:
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
ADD ColumnName bit NOT NULL DEFAULT(0)
Run Code Online (Sandbox Code Playgroud)
回退脚本会删除列,如下所示:
IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
DROP COLUMN ColumnName
Run Code Online (Sandbox Code Playgroud)
但是,回退脚本会抛出此错误:
Msg 5074, Level 16, State 1, Line 5
The object 'DF__TableName__ColumnName__1BF3D5BD' is dependent on column 'ColumnName'.
Msg 4922, Level 16, State 9, Line 5
ALTER TABLE DROP COLUMN ColumnName failed because one or …Run Code Online (Sandbox Code Playgroud) 我是EF5 Code First的新手,在开始工作项目之前,我正在修改概念验证.
我最初创建了一个看起来像的模型
public class Person {
public int Id { get; set; }
public string FirstName { get; set;}
public string Surname {get;set;}
public string Location {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我添加了一些记录,使用了一个我坚持在顶部的MVC应用程序.
现在我想将Location列更改为枚举,如:
public class Person {
public int Id { get; set; }
public string FirstName { get; set;}
public string Surname {get;set;}
public Locations Location {get;set;}
}
public enum Locations {
London = 1,
Edinburgh = 2,
Cardiff = 3
}
Run Code Online (Sandbox Code Playgroud)
当我添加新的迁移时,我得到:
AlterColumn("dbo.People", "Location", c => c.Int(nullable: false));
Run Code Online (Sandbox Code Playgroud)
但是当我运行update-database时出现错误 …
我有以下SQL命令:
ALTER TABLE dbo.UserProfiles
ADD ChatId UniqueIdentifier NOT NULL,
UNIQUE(ChatId),
CONSTRAINT "ChatId_default" SET DEFAULT newid()
Run Code Online (Sandbox Code Playgroud)
我希望能够使这个列成为唯一的,并且我希望它能够在每次向表中添加行时生成新的guid.此列不是IDENTITY列,因为我已经有一列.这是分开的.如何将此列添加到已包含用户的表中.
我正在开发一个使用Entity-Framework 6代码优先的现有项目.我需要在迁移运行之前运行一些SQL.
我有一个带有种子方法的DbMigrationsConfiguration类,但种子在迁移后运行.
我认为如果我在构造函数中运行SQL但它无法获取对上下文的引用,它将起作用.
有谁知道如何做到这一点?