English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

由於是初學者
目前正在努力學習中
圖片參考:http://tw.yimg.com/i/tw/blog/rte/smiley_1.gif

資料表叫TW
欄位分別是id1,date1,total1這三個欄位
(id1,date1這兩個欄位是key)
請問:
我如何寫一個預儲程序
把以下這筆資料寫到資料表中呢?
A1,200703,500
如果key重覆的話,就不能寫入
麻煩了,謝謝

2007-03-22 17:38:25 · 3 個解答 · 發問者 Anonymous in 電腦與網際網路 程式設計

你好!你是用SQL Server嗎?
我試了好久才試出來,
發現你錯誤太多了。
你該不會和我一樣都是初學者吧!

2007-03-23 08:56:56 · update #1

你好:
向你抱怨一下
以下三行你寫錯了
我除錯除好久才發現錯在那裡
DECALRE sintCount SMALLINT
AND data1 = '200703'
VALUE ('A1', '200703', 500)
不知你發現了嗎?

另外IF的語法
為什麼你用的方式和我用的方式都不一樣呢?
不是要用begin ..end

2007-03-23 18:16:11 · update #2

3 個解答

你好,預儲程序內文的部份如下,主要會有兩個步驟
1. 查詢此筆資料是否存在
2. 如果資料不存在才進行新增資料動作

希望對你有幫助,
3Q

DECALRE sintCount SMALLINT
SELECT sintCount = COUNT(id1)
FROM TW
WHERE id1 = 'A1'
AND data1 = '200703'

IF (sintCount >= 1)
INSERT INTO TW (id1,date1,total1)
VALUE ('A1', '200703', 500)
END IF

2007-03-23 15:54:11 補充:
寫太快把判斷式寫錯了,正確的判斷式是IF (sintCount = 0),這樣的話因為資料不存在才能進行新增的動作(這個部份另外一個網友上官在意見中已經有寫到了)

另外因為不知道你的table欄位的type是設定成哪種值,所以根據你問題中的值暫時判斷為id1與date1是varchar或char類型,tota1是數值類型,所以兩個SQL command會如此寫,因此如果跟你實際設定的欄位type有不同時,的確會有錯誤,不過看你的補充,應該你已經修改完畢試成功了吧

不過早上的確寫太快,忘了提醒上面那些不確定事項,希望還是有幫到你的忙

3Q

2007-03-24 12:39:15 補充:
你抱怨的有理,因為是睡覺前的,寫太快了,就有字漏打了,不過也就是怕有失誤的地方,所以才會說明程式運作的流程,以便真的有問題時你在除錯時比較方便,所以那三個key in錯誤應該修正如下

1. DECLARE sintCount SMALLINT
2. AND date1 = '200703'
3. VALUES ('A1', '200703', 500)

2007-03-24 12:58:40 補充:
另外沒有在if判斷式使用BEGIN...END的原因是在這段程式有沒有用到應該都沒有影響,但正常來說還是把它加上去比較不會碰到奇怪的問題,看來原始提供給你的程式碼太多小地方key in錯誤,我在下面再重新整理一遍給你參考
3Q

2007-03-24 12:59:25 補充:
DECLARE sintCount SMALLINT

SELECT sintCount = COUNT(id1)
FROM TW
WHERE id1 = 'A1'
AND date1 = '200703'

IF (sintCount >= 1)
BEGIN
INSERT INTO TW (id1,date1,total1)
VALUE ('A1', '200703', 500)
END

2007-03-22 19:42:40 · answer #1 · answered by hy321250 6 · 0 0

請問如果是複合主鍵(A1,B1,C1)如何宣告呢?IF的判斷式 又要如何撰寫呢 謝謝

2013-01-18 11:37:02 · answer #2 · answered by ? 1 · 0 0

DECALRE sintCount SMALLINT

SELECT sintCount = COUNT(id1)

FROM TW

WHERE id1 = 'A1'

AND data1 = '200703'



IF (sintCount >= 1) ' 這裡應該要改成 IF (sintCount=0)吧

INSERT INTO TW (id1,date1,total1)

VALUE ('A1', '200703', 500)

END IF

2007-03-23 08:37:31 · answer #3 · answered by 上官 5 · 0 0

fedest.com, questions and answers