2010-11-02 139 views
4

我絕不是一個SQL程序員,我正試圖完成一些我很確定已經完成了一百萬次的事情。SQL服務器觸發器問題

我試圖在每次插入新客戶時在sql中自動生成一個客戶編號,但是觸發器(或sp?)只有在至少第一個名字,姓氏和另一個名爲case編號的值爲進入。如果缺少這些字段中的任何一個,則系統會生成錯誤。如果符合條件,系統會爲該客戶生成並分配一個以字母GL-開頭的唯一ID,然後使用5位數字,因此客戶John Doe爲GL-00001,Jane Doe爲GL-00002。

我很抱歉,如果我要求太多,但我基本上任何幫助一個選擇插入更新的傢伙而已所以在此先感謝。

+1

你可以發佈觸發器的代碼?我們可以幫助你更快,更輕鬆。 – 2010-11-02 15:19:29

+0

如果其中一個字段丟失,您是否想要生成錯誤? – HLGEM 2010-11-02 15:42:34

回答

0

那麼你想要做什麼?即使這些字段不填充,也會生成客戶編號?

你看過觸發器的SQL嗎?你可以在SSMS(SQL Server Managment Studio)中執行此操作,方法是在對象資源管理器中轉到問題表中,展開表格,然後展開觸發器。

如果你打開了扳機,你會看到什麼,它對生成客戶號。如果您不確定此代碼的工作方式,請向上發佈觸發器的代碼。

如果您正在更改現有系統我建議你找出任何影響,改變了數據的輸入工作。

例如,應用程序可能會依賴於所有的初始值的其他部分被填充,所以改變的是觸發後允許添加不完整的數據,你可以inturn打破別的東西。

0

你有可能是一個獨特的約束和/或不上臺面設置NULL約束。

刪除/禁用這些(例如,在設計模式的SQL服務器管理控制檯),然後再次嘗試插入數據。請記住,插入後您可能無法啓用約束,因爲插入後違反了條件。只有禁用或重新約束,如果你確定它們是不必要的。

這裏的例子語法(你需要知道的約束名稱):

--disable 
ALTER TABLE customer NOCHECK CONSTRAINT your_constraint_name 

--enable 
ALTER TABLE customer CHECK CONSTRAINT your_constraint_name 

注意:如果我是你,我寧願嘗試像這樣的NOT NULL列中插入虛擬值:

insert into customers select afield , 1 as dummyvalue, 2 as dummyvalue from your datasource 
0

一個非常簡單的方法來做到這一點是創建這類結構的表:

類型的

客戶ID在這是一個主鍵,把它設置爲身份 類型爲varchar(3)的CustomerIDPrfix將GL-存儲爲默認值。 然後添加其他字段並將它們設置爲NOT NULL。

如果這種方式是不能接受的,你需要寫一個觸發器看看這兩篇文章: http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx

http://www.kodyaz.com/articles/sql-trigger-example-in-sql-server-2008.aspx

Basiclly它是所有有關獲取邏輯有權檢查字段空白。在本地機器上測試一個測試數據庫。這將有助於你做到正確。

3

如果我是在這種情況下,我想:

--Alter表(S),因此它不需要姓,名和箱號(NOT NULL)列。在將記錄提交到數據庫之前,處理您在應用程序端的必需字段的檢查。

- 如果它尚不存在,請將標識列添加到客戶表。

- 將一個持續計算的列添加到客戶表,該客戶表將將標識列格式化爲所需的GL-00000格式。

/* Demo computed column for customer number */ 
create table #test (
    id int identity, 
    customer_number as 'GL-' + left('00000', 5-len(cast(id as varchar(5)))) + cast(id as varchar(5)) persisted, 
    name char(20) 
) 

insert into #test (name) values ('Joe') 
insert into #test (name) values ('BobbyS') 

select * from #test 

drop table #test 

這應該滿足您的要求,而不需要引入觸發器的開銷。

+0

除了如果其中一個字段丟失或者您的表中有不良數據,我想要生成一個錯誤。如果你沒有輸入姓氏或案例號碼,你以後怎麼看喬史密斯? – HLGEM 2010-11-02 15:43:50

+0

@HLGEM:1.我建議在提交給數據庫之前,在應用程序一側檢查必填字段。 2.如果所需的字段丟失,我建議將所需的列設置爲NOT NULL將導致錯誤。 – 2010-11-02 15:45:58

+0

對不起,我想你說讓他們爲空。 – HLGEM 2010-11-02 17:11:15