似乎至少有两种方法可以使用直接T-SQL添加默认约束.我是否正确,下面两者之间的唯一区别是第二种方法专门为约束创建一个名称,第一种方法有一个由SQL Server生成?
ALTER TABLE [Common].[PropertySetting] ADD DEFAULT ((1)) FOR [Active];
ALTER TABLE [Common].[PropertySetting] ADD CONSTRAINT [DF_PropertySetting_Active) DEFAULT ((1)) FOR [Active];
Run Code Online (Sandbox Code Playgroud) 我的SQL Server数据库中有一个现有列.我已经尝试了我能想到的所有内容,但无法将默认值添加到列中.在每个其他数据库中有效的是
alter table mytable
alter column mycolumn set default(now()) --mycolumn is a datetime
Run Code Online (Sandbox Code Playgroud)
我如何在SQL Server中执行此操作?
我得到的确切语法的错误是 incorrect syntax near the keyword 'set'
我是EF的新手(这是我的第一周),但对数据库或编程并不陌生.其他人也提出了类似的问题,但我觉得它没有被问到正确的细节,或者解释得非常需要解释,所以我走了.
问题: 如何让Entity Framework正确处理数据库中执行INSERT时定义了DEFAULT CONSTRAINT的列?这意味着,如果我在插入操作期间没有在模型中提供值,如何让EF从其生成的TSQL INSERT命令中排除该列,以便数据库定义的DEFAULT CONSTRAINT可以工作?
背景
我有一个我创建的简单表,只是为了测试Entity Framework 6(EF6)及其与SQL Server能够更新的列的交互.这使用了IDENTITY,TIMESTAMP,COMPUTED和一些应用了DEFAULT CONSTRAINT的列.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DBUpdateTest](
[RowID] [int] IDENTITY(200,1) NOT NULL,
[UserValue] [int] NOT NULL,
[DefValue1] [int] NOT NULL,
[DefValue2null] [int] NULL,
[DefSecond] [int] NOT NULL,
[CalcValue] AS
(((([rowid]+[uservalue])+[defvalue1])+[defvalue2null])*[defsecond]),
[RowTimestamp] [timestamp] NULL,
CONSTRAINT [PK_DBUpdateTest] PRIMARY KEY CLUSTERED
(
[RowID] ASC
)
WITH
(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
ALTER TABLE [dbo].[DBUpdateTest] …Run Code Online (Sandbox Code Playgroud) 当我想将默认设置为默认值时,我无法找到将DATETIME列添加到mysql表的语法 - 示例 - 2011-01-26 14:30:00
有谁知道这个语法是什么样的?
这就是我所拥有的
ADD COLUMN new_date DATETIME AFTER preceding_col,
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个大约有4亿行的现有表.该表包含一组bit名为IsModified,IsDeleted和IsExpired 的列.
CREATE TABLE [dbo].[ActivityAccumulator](
[ActivityAccumulator_SK] [int] IDENTITY(1,1) NOT NULL,
[ActivityAccumulatorPK1] [int] NULL,
[UserPK1] [int] NULL,
[Data] [varchar](510) NULL,
[CoursePK1] [int] NULL,
[TimeStamp] [datetime] NULL,
[SessionID] [int] NULL,
[Status] [varchar](50) NULL,
[EventType] [varchar](40) NULL,
[DWCreated] [datetime] NULL,
[DWModified] [datetime] NULL,
[IsModified] [bit] NULL,
[DWDeleted] [datetime] NULL,
[IsDeleted] [bit] NULL,
[ActivityAccumulatorKey] [bigint] NULL,
[ContentPK1] [bigint] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我想在表中添加一个默认约束,对于所有将来插入的行,将默认那些位列为0.我试图通过以下命令执行此操作:
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsExpired DEFAULT (0) FOR IsExpired
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsDeleted DEFAULT (0) FOR …Run Code Online (Sandbox Code Playgroud) 更新:这是我的解决方案
我有一个表定义为:
CREATE TABLE [dbo].[csvrf_References]
(
[Ident] [int] IDENTITY(1,1) NOT NULL,
[ReferenceID] [uniqueidentifier] NOT NULL DEFAULT (newsequentialid()),
[Type] [nvarchar](255) NOT NULL,
[Location] [nvarchar](1000) NULL,
[Description] [nvarchar](2000) NULL,
[CreatedOn] [datetime] NOT NULL DEFAULT (getdate()),
[LastUpdatedOn] [datetime] NOT NULL DEFAULT (getdate()),
[LastUpdatedUser] [nvarchar](100) NOT NULL DEFAULT (suser_sname()),
CONSTRAINT [PK_References] PRIMARY KEY NONCLUSTERED ([ReferenceID] ASC)
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我有一个DataTable与表列名和数据类型匹配的列.在DataTable与填写DBNull.Value的CreatedOn,LastUpdatedOn和LastUpdatedUser. ReferenceID已生成.当我调用以下代码时,我得到以下错误.
码:
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, bulkCopyTran);
bulkCopy.DestinationTableName …Run Code Online (Sandbox Code Playgroud) 我的数据库表是这样的
CREATE TABLE MYBUDGET.tbl_CurrentProperty
(
[PropID] INT NOT NULL IDENTITY(1,1),
[UpdatedOn] DATETIME NOT NULL,
[Amount] MONEY NOT NULL,
[Remarks] VARCHAR(100) NOT NULL,
)
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT PK_CurrentProperty_PropID PRIMARY KEY ([PropID])
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT DF_CurrentProperty_UpdatedOn DEFAULT (DATEADD(MINUTE,30,DATEADD(HOUR, 5, GETUTCDATE()))) FOR [UpdatedOn]
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT CK_CurrentProperty_Amount CHECK([Amount] > -1)
GO
Run Code Online (Sandbox Code Playgroud)
我正在使用LINQ to SQL.在C#中,我只需要传递[Amount]和[Remarks]字段,其他字段必须使用其默认值([PropID]和[UpdatedOn]).
在C#中我创建了如下的tbl_CurrentProperties对象,
tbl_CurrentProperties currentProperties = new tbl_CurrentProperties();
currentProperties.Amount = 50.00M;
currentProperties.Remarks = "remarks";
Run Code Online (Sandbox Code Playgroud)
然后将对象提交到数据上下文.但在这里,Linq分配'1/1/0001 12:00:00 AM'了UpdatedOn字段.但这违反了SQL日期时间范围1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 …
我有一个表STUDENT_TB,它有一个STUDENT_ID,NAME,AGE列.我添加了一个包含以下命令的列: -
alter table STUDENT_TB add DOB TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
对于DOB列,我不希望它为null.现在我需要删除该默认约束.
我试过搜索但没有取得任何成功.
问候.
我在这个问题中遇到了完全相同的问题: How to override SQL Server default value constraint on a boolean when inserting new entity? [关闭]
像他一样,我从客户端到控制器获得了布尔值的良好值,false,但_context.SaveChanges();由于 Entity Framework 和数据库中的默认值约束,它通过调用设置为 true 。
但是:我正在使用 Entity Framework Core,我没有任何[DatabaseGenerated(DatabaseGeneratedOption.Computed)]注释可以删除来解决问题。
在我的 ApplicationDbContext.cs 中:
modelBuilder.Entity<myEntity>(entity =>
{
entity.Property(e => e.Active).HasDefaultValueSql("1");
//entity.Property(e => e.Active).HasDefaultValueSql<bool>("1"); // doesn't fix
...
}
Run Code Online (Sandbox Code Playgroud)
在我的数据库中:
CREATE TABLE myEntity(
Id INTEGER IDENTITY(1,1) NOT NULL,
...
Active BIT NOT NULL CONSTRAINT DF_myEntity_Active DEFAULT 1
);
Run Code Online (Sandbox Code Playgroud)
在我的控制器中:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id, Active, etc.")] Entity myEntity)
{
if …Run Code Online (Sandbox Code Playgroud) c# sql-server boolean default-constraint entity-framework-core
运行以下查询会导致客户端数据库中的所有约束.然而,在结果集几行似乎并不具有父,即parent_object_id = 0和OBJECT_NAME(parent_object_id)回报NULL.
SELECT name, type_desc, OBJECT_NAME(parent_object_id), parent_object_id
FROM sys.objects
WHERE is_ms_shipped = 0
AND type_desc LIKE '%_CONSTRAINT'
Run Code Online (Sandbox Code Playgroud)
这是否意味着数据库中存在孤立约束?如果是这样,我该如何删除它们?
根据他们的名字,我可以看到他们是在结构发生大量变化之前的残羹剩饭.
我需要将默认约束值从0更改为1.这可以通过以下方式轻松完成:
ALTER TABLE table DROP CONSTRAINT X
ALTER TABLE table ADD CONSTRAINT X default (1) for table.column
Run Code Online (Sandbox Code Playgroud)
问题是我每次在数据库上运行modelupdate时都不想删除并创建新约束.这就是为什么我想运行此代码,如果约束的值为0.
是否可以在SQL中检查默认约束的值,如果是,如何?
sql ×8
sql-server ×7
c# ×4
alter-table ×2
mysql ×2
t-sql ×2
boolean ×1
constraints ×1
datetime ×1
db2 ×1
linq-to-sql ×1
null ×1
sql-drop ×1
sqlbulkcopy ×1