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這一項是什麼意思
充許數據為空,也就是說這一列可以放數據,也可以不放。
沒有這個標志的列,則必須有數據才行,要不然數據保存不了。