扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
--1 表的identity字段可以在[sys.identity_columns]找到
新安网站建设公司创新互联,新安网站设计制作,有大型网站制作公司丰富经验。已为新安1000多家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的新安做网站的公司定做!
--比如某张表table_example的自增字段可以这样找
select * from sys.identity_columns where [object_id]= OBJECT_ID('table_example')
--2 有没有是判断,这里等价于是否存在自增字段,可以这样写:
if exists(select * from sys.identity_columns where [object_id]= OBJECT_ID('table_example'))
begin
print 'Yes'
end
else
begin
print 'No'
end
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。
IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
SCOPE_IDENTITY 和 @@IDENTITY
返回在当前会话中的任何表内所生成的最后一个标识值。
但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY
不受限于特定的作用域。
例如,有两个表 T1 和 T2,并且在 T1 上定义了 INSERT 触发器。
当将某行插入 T1 时,触发器激发,并在 T2 中插入一行。
该方案演示了两个作用域:在 T1 上的插入,以及在 T2 通过触发器的插入。
假设 T1 和 T2 都有标识列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的
INSERT 语句结束后返回不同的值。
@@IDENTITY 将返回在当前会话中的任何作用域内插入的最后一个标识列的值。
这是在 T2 中插入的值。
SCOPE_IDENTITY() 将返回在 T1 中插入的 IDENTITY 值。
这是在同一个作用域内发生的最后的插入。
如果在任何 INSERT 语句作用于作用域中的标识列之前调用 SCOPE_IDENTITY()
函数,则该函数将返回 Null。
如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。
即使未提交试图向表中插入值的事务,也永远无法回滚标识值。
例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT
语句失败,表的当前标识值仍然会增加。
创建表的时候可以 比如ID列自增
create table T1
(
id int identity(1,1),
ccode varchar(10),
cname varchar(100)
)
sql
server建表时设置ID字段自增的方法有两种:
1
、在SQL
Server
Management
Studio中实现SQL
Server自增字段
打开SQL
Server
Management
Studio,打开数据库之后,在选中的表上点“修改”,在选中需要设置为自增的字段,在右下方的表设计器里选择“标识规范”,选“是”,就设定即可。
也可以在表的属性窗口中设置设置标识列:
2、使用SQL语句在程序或者查询分析器里面实现SQL
Server自增字段
sql
server
设置自增字段identity属性
(以新建数据表tablename中的id字段为例)
create
table
tablename
(
id
int
identity(1,1)
//identity表示自增列的意思,而int
identity(1,1)表示从1开始递增,每次自增1。
)
这样设置之后,tablename数据表中的id字段就是自增列。
如果想实现带前缀或者后缀的自动增加字段,不能用varchar,还是使用上面的方法创建字段,但是在读取的时候用增加前后缀的形式来显示想要的效果,例如如果希望得出结果是a001可以这么做select
'a'+convert(varchar(20),id)
from
tablename,这里的tablename是刚才建立的具体的表明。
比方说,你要创建一个表user_info,设置的主键名称是user_id,那么可以如下设置:
create
table
user_info
(user_id
int
primary
key
identity(1,1),//主键初值为1,每次自增1,数值可变化,但要符合之前定义的类型
user_name
varchar(20)
not
null,
....
)
希望能帮到你!~
方法如下:
例如:
create table student(
Sno int identity(1,1) primary key,
Sname varchar(100)
)
这样我们的Sno字段就可以实现自增了,第一个参数是标识种子(就是开始的值),第二个参数是标识增值(每次增加多少)
这里我们开始为1,每次增加1
如果做插入的话,则:
insert into student values('李四')
注意values里面不要写自增字段名的值,因为数据库会自动帮你生成。
例如第一行为 1 小明
insert into student values('李四')
变为 1 小明
2 李四
扩展资料
SQL SERVER几种数据迁移
使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。
当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文,默认创建字段名也是中文,这将给后面数据更新操作带来麻烦,所以最好还是以有意义的英文字段名。把数据导入后,再通过执行语句,把数据插入/更新到业务表。
从SQLServer2005开始,可以直接在SSMS上查询出来的结果复制,然后粘贴到Excel上,对于少量数据来说,是非常快速方便的,需要注意的是长数字可能会变成科学记数法的形式,提前在Excel上指定列的格式为文本即可。
导入的话,ctrl + c 复制Excel上的数据,然后在选择相关表,编辑数据,把数据直接粘贴上去即可。但是不建议直接粘贴到业务表(如果表是空白没有数据,并且字段顺序对应,可以这样操作),而是建议先粘贴到一个新建的中间表中,然后再通过语句,把数据插入/更新到业务表。
这种方法的导出导入,适合于少量的数据,如5000行以内的记录,大于5000行以上就不建议了,速度较慢,如果数据过大,还一定成功。
参考资料
百度百科——SQL
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流