none
איך מראים בview תוצאות של פרוצדורה ? RRS feed

  • שאלה

  • איך מראים בview תוצאות של פרוצדורה ? (אני צריכה את זה בשביל דוח  BI שהוא בדיוק כמו view )
     הפרוצדורה מבצעת select מורכב ועושה שימוש בpivot , כך שלא ניתן לדעת איזה עמודות יש בטבלה (לכן גם אי אפשר לכתוב את ה select בפונקציה כיון שלא ניתן לדעת מראש איזה עמודות וכמה הפונקציה תחזיר).אי אפשר לכתוב גם את ה select ב view  כיון שחייבים להצהיר על משתנים וב view  לא ניתן להצהיר על משתנים

    יום שני 24 ינואר 2011 11:07

תשובות

  • כמה נקודות:

    1. לפני שאת מריצה את יצירת ה VIEW יש לשנות הגדרות על מנת לאפשר עבודה עם OpenRowset

    * מדובר בשינוי הגדרות של השרת ולכן אני לא יכול להמליץ על ביצוע הדבר בלי להתייעץ עם מי שמתחזק את השרת אבל בעקרון זה מה שצריך אם רוצים לבצע את השינוי בהגדרות:

    א. תריצי קודם כל בדיקה לבדוק מהההגדרות הנוכחיות (את יכול לשמור את התוצאות לעצמך לעתיד)

    sp_configure

    ב. עתה נשנה הגדרות תריצי שורה אחרי שורה את החלק הבא

     sp_configure 'show advanced options', 1 reconfigure
     sp_configure 'Ad Hoc Distributed Queries', 1
     reconfigure

    ג. עתה תוכלי לנסות שוב להריץ את הפרוצדורה שכתב אלי לייבה על ידי הרצת למשל ההוראה

    exec sp_ConvProc2View @procName = 'sp_Lock', @viewName ='v_Lock'

    או פשוט להריץ בניית VIEW בעזרת  OpenRowset

    __________________

    * השיטה בה עבדת מתבססת על שימוש ב OpenRowset וזה בערך אומר בעצם שימוש בנתונים חיצוניים (במקרה שלך הנתונים החיצוניים לקוחים מאותו מסד נתונים אבל פקודה זו מאפשרת גם גישה לשרת מרוחק או לקובץ חיצוני וכו'). הודעת השגיאה מצביעה על בעיה בהתחברות

    תבדקי בפרמטרים שאת מכניסה לפקודה שהכל עובד טוב
    תנסי להריץ שאילתה פשוטה עם פקודה זו בלי קשר לבניית ה VIEW
    אם הכל עובד אז גם היצירת ה VIEW אמור לעבוד
    אם לא עובד הרי שכל הבעיה בפרמטרים שאת מעבירה להוראה או בהגדרות שיש לך

     

    דוגמת שאילתה פשוטה:


    SELECT *
    FROM
        OPENROWSET (
            'SQLOLEDB'
            ,'SERVER=.;Trusted_Connection=yes'
            ,'SET FMTONLY OFF EXEC sp_Lock'
        )

    שמתי כל פרמטר בשורה וסידרתי את הקוד. תעתיקי אותו ל SSMS ותראי שמה שיש לך אלו פרמטרים של פנייה לשרת. תבדקי שאת יכולה להריץ את ההוראה.

    עדיין יש בעיה?!? תבדקי את הקישור הבא למשל לגבי הודעת השגיאה שקיבלת

    http://sqlserver2000.databases.aspfaq.com/how-do-i-prevent-linked-server-errors.html

     

    • סומן כתשובה על-ידי Ami Levin יום רביעי 26 ינואר 2011 12:00
    יום שלישי 25 ינואר 2011 13:29
    מנחה דיון

כל התגובות

  • 1. ניתן להציג ב-SSRS תוצאות של פרוצדורה, ולא רק של View.

    2. לעצם השאלה- עייני בפוסט הבא של אלי לייבה: http://www.sqlserver.co.il/?p=891


    Geri Reshef http://gerireshef.wordpress.com
    יום שני 24 ינואר 2011 11:56
  • תודה רבה הפוסט של אלי ליבה עונה בדיוק על השאלה אך יש בעיה,

    כאשר מדפיסים את   @TSQLStmt חוזר:

    CREATE VIEW ggg AS SELECT * FROM OPENROWSET ( 'SQLOLEDB','SERVER=I-C941C53A7D824\SQLEXPRESS;Trusted_Connection=yes','SET FMTONLY OFF EXEC lkj')
    OLE DB provider "SQLNCLI" for linked server "(null)" returned message "Login timeout expired".
    OLE DB provider "SQLNCLI" for linked server "(null)" returned message "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.".

    וכאשר מריצים את : exec @TSQLStmt  חוזר הerror הבא:

    SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

    אם תוכל לענות לי בבקשה מה עושים במקרה זה אודה לך מאד מאד !!

    יום שלישי 25 ינואר 2011 12:05
  • כמה נקודות:

    1. לפני שאת מריצה את יצירת ה VIEW יש לשנות הגדרות על מנת לאפשר עבודה עם OpenRowset

    * מדובר בשינוי הגדרות של השרת ולכן אני לא יכול להמליץ על ביצוע הדבר בלי להתייעץ עם מי שמתחזק את השרת אבל בעקרון זה מה שצריך אם רוצים לבצע את השינוי בהגדרות:

    א. תריצי קודם כל בדיקה לבדוק מהההגדרות הנוכחיות (את יכול לשמור את התוצאות לעצמך לעתיד)

    sp_configure

    ב. עתה נשנה הגדרות תריצי שורה אחרי שורה את החלק הבא

     sp_configure 'show advanced options', 1 reconfigure
     sp_configure 'Ad Hoc Distributed Queries', 1
     reconfigure

    ג. עתה תוכלי לנסות שוב להריץ את הפרוצדורה שכתב אלי לייבה על ידי הרצת למשל ההוראה

    exec sp_ConvProc2View @procName = 'sp_Lock', @viewName ='v_Lock'

    או פשוט להריץ בניית VIEW בעזרת  OpenRowset

    __________________

    * השיטה בה עבדת מתבססת על שימוש ב OpenRowset וזה בערך אומר בעצם שימוש בנתונים חיצוניים (במקרה שלך הנתונים החיצוניים לקוחים מאותו מסד נתונים אבל פקודה זו מאפשרת גם גישה לשרת מרוחק או לקובץ חיצוני וכו'). הודעת השגיאה מצביעה על בעיה בהתחברות

    תבדקי בפרמטרים שאת מכניסה לפקודה שהכל עובד טוב
    תנסי להריץ שאילתה פשוטה עם פקודה זו בלי קשר לבניית ה VIEW
    אם הכל עובד אז גם היצירת ה VIEW אמור לעבוד
    אם לא עובד הרי שכל הבעיה בפרמטרים שאת מעבירה להוראה או בהגדרות שיש לך

     

    דוגמת שאילתה פשוטה:


    SELECT *
    FROM
        OPENROWSET (
            'SQLOLEDB'
            ,'SERVER=.;Trusted_Connection=yes'
            ,'SET FMTONLY OFF EXEC sp_Lock'
        )

    שמתי כל פרמטר בשורה וסידרתי את הקוד. תעתיקי אותו ל SSMS ותראי שמה שיש לך אלו פרמטרים של פנייה לשרת. תבדקי שאת יכולה להריץ את ההוראה.

    עדיין יש בעיה?!? תבדקי את הקישור הבא למשל לגבי הודעת השגיאה שקיבלת

    http://sqlserver2000.databases.aspfaq.com/how-do-i-prevent-linked-server-errors.html

     

    • סומן כתשובה על-ידי Ami Levin יום רביעי 26 ינואר 2011 12:00
    יום שלישי 25 ינואר 2011 13:29
    מנחה דיון
  • תודה  על ההסבר המפורט ! 
    יום רביעי 26 ינואר 2011 08:26