
利用用户约束视图来查看:
select from user_constraints t
where tconstraint_type='P'
其中'P'为主键。
为了确定是哪一列,再关联视图 user_cons_columns:
select towner, tconstraint_name, ttable_name, scolumn_name, sposition
from user_constraints t, user_cons_columns s
where tconstraint_type = 'P'
and ttable_name = stable_name
其中的 sposition是指表中的第几列,即第几栏位是主键。满足你的要求
这样就能很容易地查出
插入一条记录后想要立刻获取其数据表中的sql server主键返回值。这个主键是自动生成的,其实实现的方式有很多,比如再进行一次查询,获取出来。或者在插入数据之前取出最大值,在最大值上面加一等等,方法很多,但是有些很不方便。
个人感觉最快的方式就是,在插入数据后直接获取sql server主键的值,然后返回过来。
方法如下:
sql语句如下:
INSERT INTO tableName (fieldname ) values (value ) SELECT @@IDENTITY AS returnName;
在sql语句中加入SELECT @@IDENTITY AS returnName;用来获取sql server主键的值
在程序中获取返回值:
public int sqlexecutereader(string sql) { DBopen(); SqlCommand myComm = new SqlCommand(sql, Connection); int newID = ConvertToInt32(myCommExecuteScalar()); DBclose(); return newID; }
当然在此处主键是int类型的自动增加的。DBopen();DBclose();的 *** 作在此就不多说了。
SELECT
表名=case when acolorder=1 then dname else '' end,
字段序号=acolorder,
字段名=aname,
标识=case when COLUMNPROPERTY( aid,aname,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = aid AND colid=acolid
))) then '√' else '' end,
类型=bname,
占用字节数=alength,
长度=COLUMNPROPERTY(aid,aname,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(aid,aname,'Scale'),0),
允许空=case when aisnullable=1 then '√'else '' end,
默认值=isnull(etext,'')
FROM syscolumns a
left join systypes b on axtype=bxusertype
inner join sysobjects d on aid=did and dxtype='U' and dname<>'dtproperties'
left join syscomments e on acdefault=eid
order by aid,acolorder
WHERE id = Object_id('表名')改这样试试User1和User4是主键,这样去查询的话得到的主键是User1、User2回答: 给你一句很给力的SELECT 表名 = case when acolorder=1 then dname else '' end, 表说明 = case when acolorder=1 then isnull(fvalue,'') else '' end, 字段序号 = acolorder, 字段名 = aname, 标识 = case when COLUMNPROPERTY( aid,aname,'IsIdentity')=1 then '√'else '' end, 主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=aid and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = aid AND colid=acolid))) then '√' else '' end, 类型 = bname, 占用字节数 = alength, 长度 = COLUMNPROPERTY(aid,aname,'PRECISION'), 小数位数 = isnull(COLUMNPROPERTY(aid,aname,'Scale'),0), 允许空 = case when aisnullable=1 then '√'else '' end, 默认值 = isnull(etext,''), 字段说明 = isnull(g[value],'') FROM syscolumns a left join systypes b on axusertype=bxusertype inner join sysobjects d on aid=did and dxtype='U' and dname<>'dtproperties' left join syscomments e on acdefault=eid left join sysproperties g on aid=gid and acolid=gsmallid left join sysproperties f on did=fid and fsmallid=0 where dname='要查询的表' --如果只查询指定表,加上此条件 order by aid,acolorder 补充: SELECT TABLE_NAME,COLUMN_NAME
Select
col_name(object_id('表'),colid) 主键字段
From sysobjects as o
Inner Join sysindexes as i On iname=oname
Inner Join sysindexkeys as k On kindid=iindid
Where
oxtype = 'PK' and parent_obj=object_id('表') and kid=object_id('表')
sql中的主键是指数据表的主关键词,用于唯一标识一个行,自带一级索引效果。
主关键字(主键,primarykey)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键或多字段主键,又称主码。
并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
扩展资料:
主键挑选的原则:
1、主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
2、永远也不要更新主键。实际上,因为主键除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。
3、主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
不是一句SQL能够做到,而需要写个脚本,通过循环使用index_col函数测试字段是否属于主键来实现,具体写法可以参考sp_helpindex学习得到。
use sybsystemprocs
execute sp_helptext sp_helpindex
列出sp_helpindex的原始脚本
以上就是关于在sql中,请问怎样才能查询一个表格中是否有主键,并且哪一个栏位是主键全部的内容,包括:在sql中,请问怎样才能查询一个表格中是否有主键,并且哪一个栏位是主键、sqlserver怎么获取主键的值、sql 查询 一个数据库中的所有主键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)