bi analyst

ברוך הבא, אורח
שם משתמש: סיסמא: זכור אותי

דיון: שליחת טבלה לפונקציה

שליחת טבלה לפונקציה 12 years 8 months ago #3841

  • gal
  • gal's Avatar
  • Offline
  • Junior Boarder
  • הודעות: 21
  • קרמה: 0
אני כותב פונקציה ואחד הפרמטרים שאני רוצה לשלוח לפונקציה הוא טבלה-
האם ניתן לשלוח טבלה כפרמטר לפונקציה
אם כן כיצד ניתן

תודה,
גל
הנהלת האתר ביטלה גישת כתיבה ציבורית.

בעניין: שליחת טבלה לפונקציה 12 years 8 months ago #3842

  • לינוּר
  • לינוּר's Avatar
  • Offline
  • Moderator
  • הודעות: 183
  • קרמה: 2
השאלה על מה אתה עובד: על 2005 או 2008 (או 2000)?
ב-2005 לא ניתן www.sqlservercentral.com/articles/Stored+Procedures/2977/
ב-2008 ניתן www.sqlservercentral.com/articles/News/3182/.
האם לא יספיק לך להעביר שם של טבלה כפרמטר?
Linur Serero
cognos.dwh.co.il/
הנהלת האתר ביטלה גישת כתיבה ציבורית.

בעניין: שליחת טבלה לפונקציה 12 years 8 months ago #3843

  • gal
  • gal's Avatar
  • Offline
  • Junior Boarder
  • הודעות: 21
  • קרמה: 0
אני עובד על 2000
אני מנסה להעביר שם של טבלה אך מקבל שגיאות.
כנראה שאני עושה זאת באופן שאינו תקין.

בגדול הפונקציה צריכה לדמות את פונקציית rank באקסל (אני יודע שב 2005 היא כבר קיימת) כלומר לזהות את המיקום/דירוג של רשומה בטבלה עפ"י שדה כלשהו.
הפונקציה שכתבתי נראית כך:
create function F_Rank
	(
	 @colToRank as float, --השדה שלפיו ייקבע הדירוג/המיקום
	 @rank as smallint,   --שדה שיקבל את המיקום כשהערך ההתחלתי שלו הוא null
	 @table as nvarchar(100) --שם הטבלה
     ) As
Begin
	declare @start as int,@end as int
	set @start=1    
	set @end=(SELECT count(*) from @table) 
	while @start<=@end    
	 begin    
		update	@table    
		set		@rank=@start    
		from	(select Max(@colToRank)[colToRank]from @table where @rank is null)V    
		where	 @table.@colToRank=V.colToRank   
	 set @start=@start+1    
	end 
End   
הנהלת האתר ביטלה גישת כתיבה ציבורית.

בעניין: שליחת טבלה לפונקציה 12 years 7 months ago #3855

  • gal
  • gal's Avatar
  • Offline
  • Junior Boarder
  • הודעות: 21
  • קרמה: 0
פתרתי את הנושא באמצעות פרוצדורה שמקבלת 3 פרמטרים-
שם טבלה לעדכון , שם השדה שיש לדרג בטבלה , ושם השדה שבו יופיע הדירוג מ - 1 ועד סך הרשומות בטבלה (עם ערכי null בתחילה)

לכל המעוניין-
---------------------------------------------------------------------------------------------------------------------------------------------------
--הכנות
CREATE TABLE [dbo].[T_RowCount] ( [rowCount] [int] NULL ) ON [PRIMARY]
TRUNCATE TABLE dbo.T_RowCount --הפרוצדורה תמלא

CREATE TABLE [dbo].[T_test] ( [PERSON_NAME] [nvarchar] (50) COLLATE Hebrew_BIN NULL , [GRADE] [float] NULL , [RANK] [int] NULL ) ON [PRIMARY]
TRUNCATE TABLE dbo.T_test
--מילוי טבלה לדוגומה
--T_test
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'JOE',87,NULL)
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'EYAL',99,NULL)
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'JHON',78,NULL)
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'ELAD',86.5,NULL)
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'YOSSI',100,NULL)
INSERT INTO dbo.T_test (PERSON_NAME,GRADE,[RANK]) VALUES ( 'MIKE',68,NULL)
---------------------------------------------------------------------------------------------------------------------------------------------------

--פרוצדורה לקבלת דירוג/מיקום
CREATE PROC sp_Rank
		@tbl AS NVARCHAR (128),		--שם הטבלה
		@colName AS NVARCHAR(100),	--עמודה שיש לדרג
		@rank AS NVARCHAR(25)		--דירוג
As
TRUNCATE TABLE dbo.T_RowCount
BEGIN
	declare @sql AS VARCHAR(8000)
	declare @start as int
	declare @end as int
	set @start=1 PRINT '@start=' + CAST(@start AS NVARCHAR(5))
	SET @sql = 'insert into dbo.T_RowCount select count(*) FROM ' + @tbl 
	EXEC(@sql)
	set @end = (SELECT [rowCount] FROM dbo.T_RowCount) PRINT '@end=' + CAST(@end AS NVARCHAR(5))
	WHILE @start<=@end
	BEGIN
			SET @sql = 'update '+ @tbl + ' ' 
			SET @sql = @sql + 'set ' + @rank + ' ' + '=' + CAST(@start AS NVARCHAR(5)) +' from ' 
			SET @sql = @sql + '(' + 'select Max(' + @colName + ')' + ' as colToRank ' + ' from ' + @tbl +' where ' + @rank +' is null' +')' +'V ' 
			SET @sql = @sql + 'where' + ' ' + @tbl +'.'+ @colName + '=' + 'V.colToRank'
		EXECUTE (@sql)	
		SET @start=@start+1
	END
END
GO
---------------------------------------------------------------------------------------------------------------------------------------------------
--הרצת הפרוצדורה
EXEC sp_Rank 'T_test','GRADE','RANK'

--הצגת תוצאה
SELECT * FROM dbo.T_test ORDER BY 3
---------------------------------------------------------------------------------------------------------------------------------------------------

הנהלת האתר ביטלה גישת כתיבה ציבורית.
זמן יצירת העמוד: 0.153 שניות

מאמרים

מגמות של ביג דאטה בעולם הביטוח
CA Technologies
SSIS - Buffer Size Optimization
קטגוריה ראשית
בדיקות BI ו-DWH לעומת הבדיקות בתחומים אחרים
קטגוריה ראשית
איסוף דרישות לפרויקטי BI
קטגוריה ראשית
כח המידע במיקוד
קטגוריה ראשית
0

מעניין? שתפו דף זה באמצעות הטלפון הנייד

הדף שלנו בפייסבוק

Microsoft

Oracle

IBM

Informatica

Sap

SAS

Qlikview

Cloudera

Machine Learning