如果判断字段是否允许为空?

tang688 2008-10-21 01:41:52
请问大家,SQL有没有可以用一SQL语句来判刑断某一字段是否允许为空?
我的字段有好多都是不能为空的,在添加内容时老是出错,无法添加数据,请要如果判断字段的属性是可以为空或不能为空的?
这样在添加内容时,我先判断一下,如果属性允许为空,就不管.不能为空就先判断下内容是否存在.
...全文
357 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2008-10-21
  • 打赏
  • 举报
回复
从邹老大很早前的一段语句中都能提出

SELECT

(case when a.colorder=1 then d.name else '' end)表名,

a.colorder 字段序号,

a.name 字段名,

(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,

(case when (SELECT count(*)

FROM sysobjects

WHERE (name in

(SELECT name

FROM sysindexes

WHERE (id = a.id) AND (indid in

(SELECT indid

FROM sysindexkeys

WHERE (id = a.id) AND (colid in

(SELECT colid

FROM syscolumns

WHERE (id = a.id) AND (name = a.name))))))) AND

(xtype = 'PK'))>0 then '√' else '' end) 主键,

b.name 类型,

a.length 占用字节数,

COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,

isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,

(case when a.isnullable=1 then '√'else '' end) 允许空,

isnull(e.text,'') 默认值,

isnull(g.[value],'') AS 字段说明

FROM syscolumns a left join systypes b



on a.xtype=b.xusertype

inner join sysobjects d

on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join syscomments e

on a.cdefault=e.id

left join sysproperties g

on a.id=g.id AND a.colid = g.smallid

order by a.id,a.colorder



可以看出syscolumns里isnullable列就存放了这个信息。


而达到你的要求的话,可以设置为不允许为空,并给默认值约束
Garnett_KG 2008-10-21
  • 打赏
  • 举报
回复

--
--COLUMNPROPERTY

--EX:
SELECT COLUMNPROPERTY( OBJECT_ID('orders'),'orderid','AllowsNull')

twgxzjk 2008-10-21
  • 打赏
  • 举报
回复
比如:要判断a01表的a0101字段是否允许空,返回0表示不允许空,1表示允许

select isnullable from syscolumns a,sysobjects b
where a.id=b.id
and b.name='a01'
and a.name='a0101'
等不到来世 2008-10-21
  • 打赏
  • 举报
回复
人为控制比较好。
等不到来世 2008-10-21
  • 打赏
  • 举报
回复
不太建议这么判断,会让存储过程显得有点低效。
还是参照数据库设计文档,认为控制比较好。
twgxzjk 2008-10-21
  • 打赏
  • 举报
回复
select isnullable from syscolumns
等不到来世 2008-10-21
  • 打赏
  • 举报
回复
create table tb(id int)
go
select isnullable from syscolumns where id=object_id('tb') and name='id'
/*
--
1
*/
hyrongg 2008-10-21
  • 打赏
  • 举报
回复
直接从企业管理器里面看表结构不是很好嘛!

不允许为空 有 not null

或者看建表语句

create table t(idx int not null, cname varchar(30) null);

muzhenxing013 2008-10-21
  • 打赏
  • 举报
回复
is not null

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧