SQL Server中,給欄位設定約束,設定預設值注意事項
使用sql語句給某個欄位設定約束並設定預設值的時候,需要先將原先的約束刪除,然後再新建約束設定預設值,否則報錯。
刪除約束:
--找約束名然後
alter
table
tablename
drop
constraint
constratintname;
新建約束,並給欄位設定預設值:
ALTER TABLE tablename ADD CONSTRAINT
constratintname
DEFAULT '預設值' FOR 欄位名;
所以,假如有個預設值需要修改的,sql可以合併寫為(先刪除約束,然後再新建約束並設定預設值):
ALTER TABLE sa_CompanyMaster DROP CONSTRAINT DF_sa_CompanyMaster_itp_version ;
ALTER TABLE sa_CompanyMaster ADD CONSTRAINT DF_sa_CompanyMaster_itp_version DEFAULT '2.2.518.999' FOR itp_version ;
上述語句可以綜合為一條語句,語句如下:
--定義變數(@name
為變數名)
declare @name varchar (200);
--將查詢出來的約束名賦值給變數
select @name= b.name from syscolumns a,sysobjects b where a .id= object_id('表名' ) and b.id= a.cdefault and a. name='欄位名' and b .name like 'DF%';
--exec執行SQL語句
if (@name is not null)
begin
--這種刪除的語句,放在if begin end中,可以保證當資料庫中不存在這個約束的時候,刪除操作不會報錯。
exec('alter table 表名 drop constraint ' + @name);
end
--為欄位新增預設值約束
ALTER TABLE 表名 ADD CONSTRAINT DF_表名_欄位名 DEFAULT 預設值 FOR 欄位名;
相關推薦
SQL SERVER中的加密欄位
1, 直接在SQL SERVER下對加密欄位加密 insert into usertable (username, upassword) values ('new',hashbytes('MD5','123456')); inse
SQL Server中查詢某個欄位中長度最短的一列資料
這個需求在查詢和篩選的時候會用到。我們可以看看下面兩種方法,均可。 至於效率問題自行研究試試。 方法一 SELECT top 1 ROW_ID,SPLIT_NO FROM CD_EMP WHERE
SQL Server中,給欄位設定約束,設定預設值注意事項
使用sql語句給某個欄位設定約束並設定預設值的時候,需要先將原先的約束刪除,然後再新建約束設定預設值,否則報錯。 刪除約束: --找約束名然後 alter table tablenamedrop constraint constratintname; 新建約束,
Sql server 計算某一個欄位值出現的頻數,總數量
SELECT YZJCYY,count(*) time FROM [dbo].[I_CheckRecordFirst] where YZJCJG='不通過' GROUP BY YZJCYY GO 其中YZJCYY 是要統計的欄位, where 是條件, count(*) t
SQL Server修改已有欄位型別,並新增預設約束
當資料表中存在資料,修改具有預設約束的欄位定義時,需要先刪除已有約束,才能對欄位定義進行修改;而在SQL Server建表時建立的預設約束,其名稱後會自動生成一段隨機碼,因此在刪除時需要找到(在SQL Server Management Studio中選擇表——&g
SQL-Server-只還原某個欄位
今天工作沒有在狀態,對project表執行update時沒有寫where語句。 update project set extselectitemfield13 = '8a2135646627e8a90166566485045ff8' 還好昨天有做備份,美滋滋。但是問題來了,能不能只還原ext
Oralce給欄位追加字元,以及oracle 給欄位替換字元
追加字元 update table_name t set t.DIST_NAME = t.DIST_NAME || '市' where PROD_NAME='愛立信' table_name :表名 DIST_NAM
SQL server 2016 查詢表的欄位註釋
基於sql server2016測試通過,應該通用與SQLserver2005以上版本。 SELECT c.name as columnName, a.VALUE as columnDescript FROM sys.exten
mysql中實現按欄位部分升序,部分降序的方法
mysql order排序時可以通過asc引數實現升序,desc引數實現降序。 例如: 升序排序:select * from 表名 order by 欄位 asc (mysql預設是升序排列) 降序排序:select * from 表名 order by
面試題:刪除資料庫中帶有重複欄位的記錄,只保留一條記錄
select * from tablename where 重複欄位1 in (select 重複欄位1 from tablename group by 重複欄位1,重複欄位2 having count(*)>1)。SQL重複記錄查詢方法:1、查詢表中多餘的重複記錄,重
sql server 新增、查詢 欄位、表註釋
環境:xp sp3,sql server2008 1、sqlserver用語句給表註釋EXECUTE sp_addextendedproperty N'MS_Description', N'表註釋', N'user', N'dbo', N'table', N'表名',
從Mysql查詢的結果,寫入txt檔案中,每個欄位用|分隔,下一條資料要換行
1.首先建立檔案 public static boolean createFile(String fileName, List<?> dtoList, Class<?> clazz, String path) { logger.debug("createF
資料庫中如何在同一張表中,複製已經存在的記錄,只有主鍵不同,其餘欄位均相同,不變
FAS_BILL_INFO表的主鍵為BILL_CODE,新生成一個new_bill_code,把old_bill_code對應的全部複製到新生成new_bill_code的記錄中; declare old_bill_code varchar2(44); --舊借據號&
SQL Server 下讀取 表/欄位 的說明備註資訊
結果程式碼是: 建表後,設定表/欄位的註釋資訊。 下面是 讀取表/欄位 的說明備註 的 SQL 語句。 獲取資料庫表清單: select top 1000 ROW_NUMBER() OVER (ORDER BY a.object_id) AS No,
hibernate生成表中有BLOB欄位的javabean,hql查詢出現無效列型別異常
出現異常:java.sql.SQLException: 無效的列型別: getInt not implemented for class oracle.jdbc.driver.T4CClobAccessorjava 問題背景:oracle中有一張表中有個欄位型別為BLOB,
sql server 增加 讀取binary欄位
package com.flyer;import java.sql.*;import java.io.*;publicclass UploadToDB...{ String driver="com.microsoft.jdbc.sqlserver.SQLServe
Hive 新增表字段,給欄位排序
新增欄位 alter table 表名 add columns (列名 STRING COMMENT 'Department name'); 排序 ALTER TABLE 表名 C
SQL Server不允許更改欄位屬性
在更改SQL Server2008的表結構的時候,遇到了如圖1所示的問題:不允許更改欄位屬性,解決辦法:開啟SQL SERVER 2008 工具-->選項-->Designers-->表設計器和資料庫設計器,把“阻止儲存要求重新建立表的更改”的勾去掉然後
如何從SQL資料庫中獲取某個欄位的型別和長度
1.select column_name,data_type,character_maximum_lengthfrom information_schema.columnswhere table_name='TableName' and column_name='ColNam
SQL 查詢的結果某個欄位是Null,用預設的值代替
如果查詢的結果某個欄位是Null,用預設的值代替。 1、)Sql server中: select case when 欄位名1 is null then 替代值