הצטרפו לקבוצות שלנו לקבלת עדכונים מרוכזים פעם בשבוע:

ווטסאפ:
http://wa.dwh.co.il
טלגרם:
http://telegram.dwh.co.il

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

More
16 years 9 months ago #3841 by gal
אני כותב פונקציה ואחד הפרמטרים שאני רוצה לשלוח לפונקציה הוא טבלה-
האם ניתן לשלוח טבלה כפרמטר לפונקציה
אם כן כיצד ניתן

תודה,
גל

Please התחברות to join the conversation.

More
16 years 9 months ago #3842 by לינוּר
השאלה על מה אתה עובד: על 2005 או 2008 (או 2000)?
ב-2005 לא ניתן www.sqlservercentral.com/articles/Stored+Procedures/2977/
ב-2008 ניתן www.sqlservercentral.com/articles/News/3182/ .
האם לא יספיק לך להעביר שם של טבלה כפרמטר?

Linur Serero
cognos.dwh.co.il/

Please התחברות to join the conversation.

More
16 years 9 months ago #3843 by gal
אני עובד על 2000
אני מנסה להעביר שם של טבלה אך מקבל שגיאות.
כנראה שאני עושה זאת באופן שאינו תקין.

בגדול הפונקציה צריכה לדמות את פונקציית rank באקסל (אני יודע שב 2005 היא כבר קיימת) כלומר לזהות את המיקום/דירוג של רשומה בטבלה עפ"י שדה כלשהו.
הפונקציה שכתבתי נראית כך:
Code:
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 

Please התחברות to join the conversation.

More
16 years 8 months ago #3855 by gal
פתרתי את הנושא באמצעות פרוצדורה שמקבלת 3 פרמטרים-
שם טבלה לעדכון , שם השדה שיש לדרג בטבלה , ושם השדה שבו יופיע הדירוג מ - 1 ועד סך הרשומות בטבלה (עם ערכי null בתחילה)

לכל המעוניין-
Code:
--------------------------------------------------------------------------------------------------------------------------------------------------- --הכנות 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 ---------------------------------------------------------------------------------------------------------------------------------------------------

Please התחברות to join the conversation.

Time to create page: 0.234 seconds