各位大侠,小弟遇到一个问题.譬如创建这样一个表:
CREATE TABLE tb_test
(
test_id char(5),
test_name char(50) primary key,
test_desc varchar(128)
)我看到有些表INSERT一行时,有些值并没有输入,但是插入后是自动增加.比如test_id,并没有在
INSERT INTO tb_test VALUES ('a','b')结果是:00001,a,b请问这个是怎么实现的?如果test_id char(5) DEFAULT xxx
那么这个xxx怎么弄的呢?谢谢...inserttablecreate
CREATE TABLE tb_test
(
test_id char(5),
test_name char(50) primary key,
test_desc varchar(128)
)我看到有些表INSERT一行时,有些值并没有输入,但是插入后是自动增加.比如test_id,并没有在
INSERT INTO tb_test VALUES ('a','b')结果是:00001,a,b请问这个是怎么实现的?如果test_id char(5) DEFAULT xxx
那么这个xxx怎么弄的呢?谢谢...inserttablecreate
如果真要这种效果,你可以写个函数,获取流水帐号,
比如说流水帐号 函数为dbo.a()
那么创建表的时候就可以
CREATE TABLE tb_test
(
test_id char(5) default dbo.a(),
test_name char(50) primary key,
test_desc varchar(128)
)
这样再插入就可以了
INSERT INTO tb_test VALUES ('a','b')
a列默认的数值就是00001,你也可以更改。有时候有的默认值是自动生成的那种,你就不能更改
y int not null default 0,
...)或者显式加default 约束。
我没弄过SQL.所以,不是很明白这个函数写在哪里.请再给点提示,谢谢
(
test_id int,
test_name char(50) primary key,
test_desc varchar(128)
)默认值,一般是常量值或者标量函数,比如getdate(),这种字符形式的0001应该是不行的
CREATE TABLE tb_test
(
test_id char(5) default '00001',
test_name char(50) primary key,
test_desc varchar(128)
)
自增列不支持char,我已经尝试过,现在应该就是default之后的函数问题,不知道在什么地方添加这个函数
自增列加计算列create table x(
id int identity(1,1),
v char(5) as right('00000' + rtrim(id),5),
....
)
v就是你要的列。
RETURNS char(5)
AS
BEGIN
RETURN (SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
END
select dbo.GetIdentityNum()
drop function GetIdentityNum()
drop table tb
create table tb
(
id char(5) default dbo.GetIdentityNum(),
name nvarchar(10)
)insert into tb(name) values('a')
insert into tb(name) values('b')
select * from tb
自增列加计算列create table x(
id int identity(1,1),
v char(5) as right('00000' + rt……CREATE TABLE tb_test
(
id int identity(1,1),
test_id char(5) AS RIGHT('00000'+rtrim(id),5),
test_name char(50) primary key,
test_desc varchar(128)
)提示错误:消息 156,级别 15,状态 1,第 4 行
关键字 'AS' 附近有语法错误。
船长,你好.我用你的方法,如果这样写:
CREATE FUNCTION dbo.GetIdentityNum()
RETURNS char(5)
AS
BEGIN
RETURN
(SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
ENDcreate table tb
(
id char(5) default dbo.GetIdentityNum(),
name nvarchar(10)
)会报语法错误.分开写,先运行function,再创建表就能成功
函数和创建表不能同时执行么
RETURNS char(5)
AS
BEGIN
RETURN
(SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
END
go
create table tb
(
id char(5) default dbo.GetIdentityNum(),
name nvarchar(10)
)
go这样就OK了
drop table tb_test
go
CREATE TABLE tb_test
(
id int identity(1,1),
test_id AS RIGHT('00000'+rtrim(id),5),
test_name char(50) primary key,
test_desc varchar(128)
)
goinsert tb_test select 'a','d'
select * from tb_test
go
/*
1 00001 a d
*/
RETURNS char(5)
AS BEGIN
RETURN
(SELECT RIGHT('0000'+ltrim(convert(nvarchar,count(1)+1)),5) from tb )
END
go
create table tb
(
test_id char(5) default dbo.GetIdentityNum(),
test_name nvarchar(10) )
go
insert into tb(test_name)
select 'test1'
go