我的問題是我有一組表記錄了一組表。我爲其他目的調用存儲過程。但是,當它發現一些重複的記錄。它需要返回錯誤消息回到PHP。SQL Server存儲過程+從表記錄中設置錯誤消息
C1 C2 c3
abc 32 21.03.2010
def 35 04.04.2010
pqr 45 30.03.2010
abc 12 04.05.2010
xyz 56 01.03.2010
ghi 21 06.05.2010
def 47 17.02.2010
klm 93 04.03.2010
xyz 11 01.03.2010
對於上述設置,它需要檢查具有相同c1的記錄。 存儲過程應該返回爲abc,def,xyz是重複的。
我試過這樣的事情。這不起作用,它有一組以上的重複記錄。請幫助我加強這一點來解決目的。
SET @duplicate = (SELECT c1 FROM temp GROUP BY c1 HAVING count(c1) > 1)
--Check for duplicate concession Nr.
IF(len(@duplicate) > '1')
BEGIN
SET @error = @error + ' Duplicate C1 Number:- ' + @duplicate
SET @errorcount = @errorcount + 1
END
由於這是一種類型錯誤,我正在檢查errorcount。
IF @errorcount <> '0'
BEGIN
GOTO E_General_Error
END
-- If an error occurs, rollback and exit
E_General_Error:
PRINT 'Error'
SET @error = @error
IF @@error <> 0 SET @error = 'Database update failed'
ROLLBACK TRANSACTION update_database
RETURN
END
現在它能夠返回重複的c1號碼abc。如果有超過1個問題出現。
在此先感謝!
它,像一個魅力工作。謝謝你的快速回復。我一些如何嘗試這種方式沒有設置@duplicate =''。它沒有爲我工作。如果你能解釋我爲什麼需要初始化,那將是非常好的。 – satya 2010-05-07 12:35:19
@Lucky。你需要初始化它的唯一原因是因爲如果你將NULL和一個字符串連接在一起,你最終會得到NULL。可以避免使用COALESCE進行初始化,當你不想像這裏添加額外的分隔符時這很有用http://vyaskn.tripod.com/code/cat.txt – 2010-05-07 13:02:18
啊 - 我忘了你可以使用這個方便的技巧。工作很好。 – SqlRyan 2010-05-07 14:44:51