1. 程式人生 > >SQL Server中,給欄位設定約束,設定預設值注意事項

SQL Server中,給欄位設定約束,設定預設值注意事項

使用sql語句給某個欄位設定約束並設定預設值的時候,需要先將原先的約束刪除,然後再新建約束設定預設值,否則報錯。

刪除約束

--找約束名然後
alter table tablenamedrop 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的javabeanhql查詢出現無效列型別異常

出現異常: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   替代值