1. 如何用sql语句查询一个数据表所有字段的类型
用SQL语句查询一个数据表所有字段的类型可以参考下面的代码:
SELECT
name AS column_name,TYPE_NAME(system_type_id) AS column_type,
max_length,is_nullable
FROM sys.columns
WHERE object_id=OBJECT_ID(N'Address')
(1)sqlnullable扩展阅读:
SQL语句
创建索引:create [unique] index idxname on tabname(col…。)
增加列:Alter table table_name add column_name column_type [default 默认值]--在表中增加一列,[]内的内容为可选项
删除索引:drop index idxname on tabname
2. c# 获取sql字段 是否允许为空
SELECT
CASEWHENC.column_id=1THENO.nameELSEN''ENDAS表名,
C.column_idAS列ID,
C.nameAS列名称,
CASEWHENC.is_nullable=1THENN'√'ELSEN''ENDAS允许空
FROM
sys.columnsASC
INNERJOINsys.objectsASOONC.object_id=O.object_idANDO.type='U'ANDO.is_ms_shipped=0
ORDERBYO.name,列ID
3. c# 判断 sql 字段的类型
很久以前做代码生成器的时候写过这个东西,找出来看看。(只适用于SQL Server)
以下SQL获取当前数据库所有表以及表中的字段的信息,要获取特定表的信息,只需加一句 “and t.name = @tname”
SELECT c.name AS ColumNname, t2.name AS Type, c.max_length AS MaxLength, c.precision, c.scale, c.is_nullable AS Nullable,
t.name AS TableName
FROM sys.tables AS t INNER JOIN
sys.columns AS c ON c.object_id = t.object_id INNER JOIN
sys.systypes AS t2 ON c.user_type_id = t2.xusertype LEFT OUTER JOIN
(SELECT B.COLUMN_NAME, 1 AS P, B.TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS A INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS B ON A.TABLE_NAME = B.TABLE_NAME AND
A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
WHERE (A.CONSTRAINT_TYPE = 'PRIMARY KEY')) AS P2 ON c.name = P2.COLUMN_NAME AND
t.name = P2.TABLE_NAME
WHERE (t.is_ms_shipped = 0) AND (t.name <> 'sysdiagrams')
ORDER BY tablename, c.column_id
取得的数据类型是SQL Server中的类型,所以还要做个映射:
public class DataTypeMapper {
public Type MapFromDBType(string datatype, int? dataLength, int? dataPrecision, int? dataScale, bool nullable) {
var dataType = String.Format(",{0},", datatype.ToLower());
if (",datetime,smalldatetime,".Contains(dataType)) {
return nullable ? typeof(DateTime?) : typeof(DateTime);
}
if (",bigint,".Contains(dataType)) {
return nullable ? (typeof(long?)) : typeof(long);
}
if (",int,smallint,".Contains(dataType)) {
return nullable ? (typeof(int?)) : typeof(int);
}
if (",float,real,".Contains(dataType)) {
return nullable ? (typeof(float?)) : typeof(float);
}
if (",binary,varbinary,image,timestamp,".Contains(dataType)) {
return typeof(byte[]);
}
if (",bit,".Contains(dataType)) {
return nullable ? (typeof(bool?)) : typeof(bool);
}
if (",decimal,smallmoney,money,numeric,".Contains(dataType)) {
return nullable ? (typeof(decimal?)) : typeof(decimal);
}
if (",uniqueidentifier,".Contains(dataType)) {
return nullable ? (typeof(Guid?)) : typeof(Guid);
}
if (",tinyint,".Contains(dataType)) {
return nullable ? (typeof(byte?)) : typeof(byte);
}
if (",char,varchar,nchar,nvarchar,text,ntext,".Contains(dataType)) {
return typeof(string);
}
if (",xml,".Contains(dataType)) {
return typeof(XmlDocument);
}
throw new Exception(String.Format("DBType: [{0}] can not be mapped.", datatype));
}
public bool IsUnicode(string datatype) {
var dataType = String.Format(",{0},", datatype.ToLower());
return ",nchar,nvarchar,ntext,".Contains(dataType);
}
}
4. SQL语法错误:无法将 NULL值插入列'',该列不允许空值。INSERT失败。怎么解决啊
错误原因:将NULL插入主码列或者该列属性为不能为空。主码具有唯一性和不可重复性,当主码为空时,唯一性约束被破坏所以主码列不能重复和为空值。如果该列不是主码,则说明设置了unique属性。
改正:主码列属性不可以改变,其他列可通过改变属性去允许输入空值。
改正的SQL语句:ALTER TABLE table1 ALTER COLUMN [name] varchar(60) NULL;
在SQL数据库中具体设置为:
(4)sqlnullable扩展阅读:
SQL有以下几种约束:
主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空。
检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束。
默认约束(Default Constraint):某列的默认值,如我们的男性同学较多,性别默认为男。
键约束(Foreign Key):用于在两表之间建立关系需要制定引用主表的哪一列。
5. 在sql中我设置列表的类型时没有设置为空,还有主键都设置了,为什么在ASP中输入的数据还是可以插入空值的
引用上边的,sql中主键是不为空的,除非是复合主键,当然,复合主键必须有一个不为空。
在回到刚才的问题,软件中的列表控件当未选值时,它的值是“”,并不是空(注意,他是空,并不是NULL)。所以插入到数据库是可以的。当然,也有可能是asp代码获取下拉列表的值时有错误,导致它的值是默认的即“”。
6. 数据库里建表.有一项是Nullable这一项是什么意思
充许数据为空,也就是说这一列可以放数据,也可以不放。
没有这个标志的列,则必须有数据才行,要不然数据保存不了。