2013-10-30 29 views
0
FirstName  LastName  University 
    Bob   Brown  Aviation 
    Kate  Dylan  Economic 
    Tommy  Loren  Aviation 

大學有默認值:航空。 有存儲過程,其中插入值表, 在過程調用有3個參數應用:如何在某些值爲空時插入值

@declare firstname varchar(50), 
@declate lastname varchar(50), 
@declare university varchar(50) 

insert into myTbl (FirstName,LastName,University) values(@firstname,@lastname,@university) 

我想如果在程序@university是空的不要插入表例如,如果我前高管: EXEC myProcedure 'Joseph','Divan',''它必須插入表只名字和姓氏大學將是航空,因爲它是默認值

+0

在這個過程中,設置'null'爲'university'參數的默認值。然後檢查該參數是否爲空。如果是這樣的話:'insert into myTbl(FirstName,LastName)values(@ firstname,@ lastname)'。 – user1429080

回答

2

如果您的默認名稱「大學」欄將永遠是航空,我會建議這種方法。

設置「大學」欄的默認值約束,如果值爲空,它會自動插入默認值。

ALTER TABLE myTbl ADD CONSTRAINT DF_UName DEFAULT N'Aviation' FOR University 

,然後使用此代碼

declare @firstname varchar(50), 
declate @lastname varchar(50), 
declare @university varchar(50) 

IF (@university = '' OR (@university IS NULL)) 
BEGIN 
     INSERT INTO myTbl (FirstName,LastName) 
     VALUES (@firstname,@lastname); 
END 
ELSE 
BEGIN 
     INSERT INTO myTbl (FirstName,LastName,University) 
     VALUES (@firstname,@lastname,@university); 
END 

希望這有助於

+1

不,這不起作用。如果您明確地向列中插入空值,則不會使用默認列值。如果您沒有在插入語句中指定該列,則將使用該列的默認值。您的建議代碼將在表中插入null,或者如果列不允許空值,則會導致錯誤。 – user1429080

+0

哦,你是對的,如果我們明確指定它,它不會採用默認值。糾正了我的答案。 – wizzardz

+0

現在看起來不錯。唯一的謎就是它在編輯之前被接受的原因。我們永遠不會知道我猜! :-) – user1429080

0

試試這個

@declare firstname varchar(50), 
@declate lastname varchar(50), 
@declare university varchar(50) 

IF (@university is not null) 
BEGIN 
    insert into myTbl (FirstName,LastName,University) values(@firstname,@lastname,@university) 
END 
+0

我需要,如果它是空或空只是跳過,不打印的東西 – GeoVIP

+0

現在試試我已經修改了答案。 –

1

MS SQL允許你設置參數的默認值在存儲過程:

CREATE PROCEDURE MyProc 
    @firstName varchar(50), 
    @lastName varchar (50), 
    @university varchar(50) = 'Aviation' 
AS 
INSERT INTO myTbl (FirstName,LastName,University) 
    VALUES (@firstname,@lastname,@university); 

您可以通過兩種方式來使用它:

EXEC MyProc 'Bob', 'Brown' 
EXEC MyProc 'Kate', 'Dylan', 'Economic' 
+1

這會起作用,但是如果表格定義發生變化,需要使用不同的默認值,那麼您必須記得在此過程中更改默認值。 – user1429080

+0

@ user1429080,謝謝,有用的評論。另一方面,必須簡單地選擇如何存儲默認值:作爲約束或作爲過程的值。這取決於需求,但在這兩種情況下都需要保持更新。 – Smileek

+0

是的。我的評論是基於這樣一個假設,即在表的列規範中設置了默認值。但是由於接受的答案提出了一種在這些情況下不起作用的方法,似乎我的假設是不正確的。我仍然不明白接受的答案可能如何工作,除非默認值由某些觸發器或其他深奧的解決方法維護。 – user1429080

0

只要把下面插入之前到語句:

if @university is null set @university = null

1

我認爲最好是更改表格模式以獲得更好的性能。

您可以按如下所示更改表格模式以合併默認值。

ALTER TABLE myTbl 
ALTER COLUMN Univesity SET DEFAULT 'Aviation' 

P.S.如果你只需要使用存儲過程,那麼你可以參考上面的答案。

0

什麼解決方案,你選擇檢查大學是否爲空或不,嘗試提取IF條件出存儲的因爲它會減慢執行速度並消耗執行計劃的內存。最好的做法是在查詢中使用IF條件,並根據條件的執行情況調用兩個不同的存儲過程。

0

當插入值時,可以簡單地包含參數檢查。如果您還沒有指定的任何值,將設置「航空」爲默認

insert into #MyTbl (FirstName,LastName,University) values(@firstname,@lastname,isnull(@university, 'Aviation')) 

感謝