sql server 2000 בדיקת קוד ת.ז
מתוך שאילתא. שלום, יש לי פרוצדורה המקבלת מחרוזת בת 9 ספרות. הפרוצדורה מחשבת ספרת ביקורת של תעודת הזיהוי בכך שהיא עוברת על כל סיפרה במחרוזת, שולחת אותה לפונקציה המכפילה את הסיפרה ב 1 או 2 , מחברת את תוצאת ההכפלה ומחזירה מכפלה על כל סיפרה ששולחת לה הפרוצדורה. הפרוצדורה מסכמת את כל המכפלות שמחזירה הפונקציה, מחסירה את סיפרת היחידות של המספר שהוא סך המכפלות מ 10 וכך אני מקבל סיפרת ביקורת כשרה למהדרין. השאלה היא: "במה הועילו חכמים בתקנתם". אני רוצה להריץ את הפרוצדורה הזו שכשלעצמה מפעילה פונקציה, על כל טור ה ת.ז בטבלה בשאילתא אך אין לי מושג כיצד. הקוד שאני רואה בעיני רוחי הוא משהו מעין:
מתוך שאילתא. שלום, יש לי פרוצדורה המקבלת מחרוזת בת 9 ספרות. הפרוצדורה מחשבת ספרת ביקורת של תעודת הזיהוי בכך שהיא עוברת על כל סיפרה במחרוזת, שולחת אותה לפונקציה המכפילה את הסיפרה ב 1 או 2 , מחברת את תוצאת ההכפלה ומחזירה מכפלה על כל סיפרה ששולחת לה הפרוצדורה. הפרוצדורה מסכמת את כל המכפלות שמחזירה הפונקציה, מחסירה את סיפרת היחידות של המספר שהוא סך המכפלות מ 10 וכך אני מקבל סיפרת ביקורת כשרה למהדרין. השאלה היא: "במה הועילו חכמים בתקנתם". אני רוצה להריץ את הפרוצדורה הזו שכשלעצמה מפעילה פונקציה, על כל טור ה ת.ז בטבלה בשאילתא אך אין לי מושג כיצד. הקוד שאני רואה בעיני רוחי הוא משהו מעין:
select checkid(id) from my table
לכאורה אין פסול בשאילתא אבל הבעיה היא שאין לי פונקציה כזו. יש לי פרוצדורה המפעילה פונקציה. לא נראה לי שיהיה זה נכון לכתוב פונקציה אחת המפעילה פונקציה שניה ("מקרוני"). מישהו יכול לעזור לי בבעיה זו ? ליתר ביטחון אני מציג את הפרוצדורה שכתבתי ואת פונקציית העזר כנגדה:/*EXEC call_function1 '99999999'*/ ALTER PROCEDURE call_function1 @id_number VARCHAR(9) AS BEGIN TRANSACTION DECLARE @codigit INTEGER SET @codigit= dbo.function1(CAST(SUBSTRING(@id_number,8,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,7,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,6,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,5,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,4,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,3,1) AS INTEGER), 1)+ dbo.function1(CAST(SUBSTRING(@id_number,2,1) AS INTEGER), 2)+ dbo.function1(CAST(SUBSTRING(@id_number,1,1) AS INTEGER), 1) DECLARE @toCheck INTEGER SET @toCheck=10-(@coDigit%10) PRINT @toCheck COMMIT
זוהי הפונקציה:ALTER FUNCTION function1 (@myDigit INTEGER, @myMultiplier INTEGER) RETURNS INTEGER AS BEGIN DECLARE @laStep INTEGER DECLARE @firStep INTEGER SET @firStep=@myDigit*@myMultiplier IF(@firStep< 10) SET @laStep=@firStep ELSE BEGIN DECLARE @firStdig INTEGER SET @firStdig=@firStep/10 DECLARE @seconDig INTEGER SET @seconDig=@firStep%10 SET @laStep=@firStdig+@seconDig END RETURN @laStep END
תודה !