Unable to assign default constraint in an existing column in SQL Server - sql

I am using SQL Server and have a table Employee. I want to change the constraint of Starting_Date from NULL to NOT NULL and add a DEFAULT with GETDATE() function. Please check the screenshot and suggest how to solve the error I get:

Try this TSQL command for add, not null constraint
ALTER TABLE [dbo].[Employee] ALTER COLUMN [Starting_Date] DataTime NOT NULL;
If your table had any rows with null Starting_Date run this query before adding the constraint
UPDATE [dbo].[Employee] SET Starting_Date = [dbo].[GetDate]() WHERE Starting_Date = NULL;
and then this, for default constraint from your function output result
ALTER TABLE [dbo].[Employee]
ADD CONSTRAINT df_Starting_Date
DEFAULT([dbo].[GetDate]())FOR Starting_Date;

Related

SQL commamd Line

How to apply Not null constraint in SQL command line in Oracle database
this example shows if you want to give a constraint a name
ALTER TABLE mytable
MODIFY (mynumber NUMBER(8,2) CONSTRAINT my_cons_name NOT NULL);
this example show if you do not want to give a constraint a name
ALTER TABLE mytable
MODIFY (mynumber NUMBER(8,2) NOT NULL);
source: https://community.oracle.com/thread/45653

SQL Alter table default error

I am trying to modify an Integer field on existing table from nullable to non-nullable and adding default value to it.
ALTER TABLE dbo.current_status
ALTER COLUMN next_sign_id INT NOT NULL
This statement works, but this one doesn't:
ALTER TABLE dbo.current_performance_status
ALTER COLUMN next_sign_tp_id INT NOT NULL DEFAULT(0)
What is the problem here and how do I achieve both in one statement? I am using sql 2008.
You have to do this in three statements (thanks #MartinSmith for the sanity check, who suggested WITH VALUES which isn't correct in this case but still reminded me that this table may not be empty):
ALTER TABLE dbo.current_performance_status
ADD CONSTRAINT df DEFAULT (0) FOR next_sign_id;
UPDATE dbo.current_performance_status
SET next_sign_id = 0
WHERE next_sign_id IS NULL
ALTER TABLE dbo.current_performance_status
ALTER COLUMN next_sign_id INT NOT NULL;

How to modify datatype of a column with a default value

I'm trying to change the datatype of a column in SQL Server from tinyint to smallint.
But there's a default value on my column and I don't know the name of the constraint.
Is there an easy way to do it ?
This don't work because of the default constraint :
ALTER TABLE mytable
Alter Column myColumn smallint NOT NULL default 1
You need to do this in several steps - first: drop the default constraint on your column, then modify your column.
You could use code something like this:
-- find out the name of your default constraint -
-- assuming this is the only default constraint on your table
DECLARE #defaultconstraint sysname
SELECT #defaultconstraint = NAME
FROM sys.default_constraints
WHERE parent_object_id = object_ID('dbo.mytable')
-- declare a "DROP" statement to drop that default constraint
DECLARE #DropStmt NVARCHAR(500)
SET #DropStmt = 'ALTER TABLE dbo.mytable DROP CONSTRAINT ' + #defaultconstraint
-- drop the constraint
EXEC(#DropStmt)
-- alternatively: if you *know* the name of the default constraint - you can do this
-- more easily just by executing this single line of T-SQL code:
-- ALTER TABLE dbo.mytable DROP CONSTRAINT (fill in name of constraint here)
-- modify the column's datatype
ALTER TABLE dbo.mytable
Alter Column myColumn smallint NOT NULL
-- re-apply a default constraint - hint: give it a sensible name!
ALTER TABLE dbo.mytable
ADD CONSTRAINT DF_mytable_myColumn DEFAULT 1 FOR MyColumn
You could do it as a three step process
add the new column with a different name,
copy the values from the old column to the new
drop the old column
It it matters that the name is the same, then repeat the process to change the name back.
You can find the constraint name for the default using MS Management Studio. Just find the tables folder for the given DB and look under Constraints. If there are many constraints, you can "Script the Constraint(s) to a query window which show the associated column name.

Alter column's default value

I have a table which has a column 'CompanyID int not null' and its default value is set to 10. Now I want to write a query which will alter this default value to 1. How can can I do it?
Any help will be appreciated. I am using SQL server 2000.
I think the best you can do is drop the constraint and create it again:
alter table dbo.yourTable
drop constraint default_value_name_constraint
go
alter table dbo.yourTable
add constraint default_value_name_constraint default YourValue for ColumnName
go
First, find out the name of the 'constraint' on the field which is used to set the default. You can do this by running this query:
EXEC sp_helpconstraint 'MyTable'
Then, you can just drop and re-add the constraint.
ALTER TABLE dbo.MyTable
DROP CONSTRAINT def_MyTable_CompanyID
GO
ALTER TABLE dbo.MyTable
ADD CONSTRAINT def_MyTable_CompanyID DEFAULT (1) FOR CompanyID
GO
ALTER TABLE tablename ALTER COLUMN CompanyID SET DEFAULT 1;
ALTER TABLE tablename ALTER COLUMN CompanyID SET DEFAULT Pending;
I have tried this in mysql and it was giving error near Pending
Then I tried
ALTER TABLE tablename ALTER COLUMN CompanyID SET DEFAULT 'Pending';
which worked fine.

In SQL Server 2005, how do I set a column of integers to ensure values are greater than 0?

This is probably a simple answer but I can't find it. I have a table with a column of integers and I want to ensure that when a row is inserted that the value in this column is greater than zero. I could do this on the code side but thought it would be best to enforce it on the table.
Thanks!
I was in error with my last comment all is good now.
You can use a check constraint on the column. IIRC the syntax for this looks like:
create table foo (
[...]
,Foobar int not null check (Foobar > 0)
[...]
)
As the poster below says (thanks Constantin), you should create the check constraint outside the table definition and give it a meaningful name so it is obvious which column it applies to.
alter table foo
add constraint Foobar_NonNegative
check (Foobar > 0)
You can get out the text of check constraints from the system data dictionary in sys.check_constraints:
select name
,description
from sys.check_constraints
where name = 'Foobar_NonNegative'
Create a database constraint:
ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0)
You can have pretty sophisticated constraints, too, involving multiple columns. For example:
ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
I believe you want to add a CONSTRAINT to the table field:
ALTER TABLE tableName WITH NOCHECK
ADD CONSTRAINT constraintName CHECK (columnName > 0)
That optional NOCHECK is used to keep the constraint from being applied to existing rows of data (which could contain invalid data) & to allow the constraint to be added.
Add a CHECK constraint when creating your table
CREATE TABLE Test(
[ID] [int] NOT NULL,
[MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
you can alter your table and add new constraint like bellow.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.table1 ADD CONSTRAINT
CK_table1_field1 CHECK (field1>0)
GO
ALTER TABLE dbo.table1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT