在T-SQL中如何使用default定义列的默认值?

时间:2022-03-02 09:52:05
例如我建立了一个如下的表格:
create  database Student

go


use Student

go


create  table  Stu
(
  Sno  char(10)  primary key,

  Sname  varchar(50)  not null,

  Ssex  char(2)  ,

Sdetp varchar(50)  not null,

--constraint  DE default  '男'  for  Ssex--查询分析器报语法错误啊,在这里!
)

go

如果我是这样写的话:Ssex  char(2) default '男'
在企业管理器中查看时并没有默认赋值啊。
我用的是MS SQL Server2000,请问该如何编写SQL语句解决这个问题?

错误报告:
服务器: 消息 170,级别 15,状态 1,行 13
第 13 行: 'for' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 15
第 15 行: 'for' 附近有语法错误。

15 个解决方案

#1


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) IS NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)

#2


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)


多打了个IS 晕

#3


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)

#4


引用 2 楼 sql77 的回复:
SQL code
create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--……


可是人家说这样看不到 默认直

#5


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) default '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)


insert stu(sno,sname,sdetp) select 1,'ff','sss'

select* from stu

--result
/*Sno        Sname                                              Ssex Sdetp                                              
---------- -------------------------------------------------- ---- -------------------------------------------------- 
1          ff                                                 男    sss

(所影响的行数为 1 行)

*/

#6


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) not null default '男',

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)
insert into stu(Sno,Sname,Sdetp) select '001','张三','zzz' 
select * from stu

/*
Sno        Sname                                              Ssex Sdetp
---------- -------------------------------------------------- ---- --------------------------------------------------
001        张三                                                 男    zzz

(1 行受影响)


*/

#7


测试后7哥,小F姐的都可以看到默认值的。

#8



create table stua(a char(2) default '男')
insert stua default values

select * from stua

--result
/*a    
---- 


(所影响的行数为 1 行)
*/

#9


--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
这句代码为何报错呢?

#10


这么用是属于表约束,表约束中没有default

#11


引用 10 楼 chuifengde 的回复:
这么用是属于表约束,表约束中没有default



在2000中不可以对default定义为表级约束吗?
在2005中为何可以?

#12


引用 9 楼 luo6620378xu 的回复:
--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
这句代码为何报错呢?

你自己查一下CREATE TABLE 的联栅帮助吧,表约束要修改时才会有默认约束,创建时没有

#13


不是不可,创建时不可,修改时还是有的

#14


create table stu(a varchar(20))

alter table stu add default '男' for a

insert stu default values

select * from stu

--result
/*a                    
-------------------- 


(所影响的行数为 1 行)

*/

#15


如果那样看不到默认值的话,你可以这样试试
alter table Stu
add constraint DF_Ssex default ('男') for Ssex

#1


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) IS NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)

#2


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)


多打了个IS 晕

#3


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)

#4


引用 2 楼 sql77 的回复:
SQL code
create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2)  NOT NULL DEFAULT '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--……


可是人家说这样看不到 默认直

#5


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) default '男' ,

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)


insert stu(sno,sname,sdetp) select 1,'ff','sss'

select* from stu

--result
/*Sno        Sname                                              Ssex Sdetp                                              
---------- -------------------------------------------------- ---- -------------------------------------------------- 
1          ff                                                 男    sss

(所影响的行数为 1 行)

*/

#6


create table Stu
(
Sno char(10) primary key,

Sname varchar(50) not null,

Ssex char(2) not null default '男',

Sdetp varchar(50) not null,

--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
)
insert into stu(Sno,Sname,Sdetp) select '001','张三','zzz' 
select * from stu

/*
Sno        Sname                                              Ssex Sdetp
---------- -------------------------------------------------- ---- --------------------------------------------------
001        张三                                                 男    zzz

(1 行受影响)


*/

#7


测试后7哥,小F姐的都可以看到默认值的。

#8



create table stua(a char(2) default '男')
insert stua default values

select * from stua

--result
/*a    
---- 


(所影响的行数为 1 行)
*/

#9


--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
这句代码为何报错呢?

#10


这么用是属于表约束,表约束中没有default

#11


引用 10 楼 chuifengde 的回复:
这么用是属于表约束,表约束中没有default



在2000中不可以对default定义为表级约束吗?
在2005中为何可以?

#12


引用 9 楼 luo6620378xu 的回复:
--constraint DE default '男' for Ssex--查询分析器报语法错误啊,在这里!
这句代码为何报错呢?

你自己查一下CREATE TABLE 的联栅帮助吧,表约束要修改时才会有默认约束,创建时没有

#13


不是不可,创建时不可,修改时还是有的

#14


create table stu(a varchar(20))

alter table stu add default '男' for a

insert stu default values

select * from stu

--result
/*a                    
-------------------- 


(所影响的行数为 1 行)

*/

#15


如果那样看不到默认值的话,你可以这样试试
alter table Stu
add constraint DF_Ssex default ('男') for Ssex