דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
א

ארכיטקט

@ארכיטקט
אודות
פוסטים
1.1k
נושאים
252
שיתופים
0
קבוצות
0
עוקבים
1
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • לאחר מאבקים עזים: קוד שמתעד כל שינוי בדטה בייס
    א ארכיטקט

    תנסה לעשות את זה פשוט עם חלונית new query ולהדביק את הקוד ולעשות אקסקיוט, בלי ללכת לפונקציות. אחר כך תרפרש את התיקיה של הפונקציות ותראה את הפוקנציה שנוצרה.
    אגב אתה משתמש בסיקוול סרבר 2012???
    כי אני כתבתי אותו ב 2012 אני לא יודע מה גירסאות אחורנית תומכות.
    תנסה בכל אופן.

    פורסם במקור בפורום CODE613 ב27/01/2014 22:29 (+02:00)

    ארכיון code613m

  • לאחר מאבקים עזים: קוד שמתעד כל שינוי בדטה בייס
    א ארכיטקט

    @רחמים

    אפשר גם דוגמא לטריגר ואיפה כותבים אותו בדיוק.

    טריגר אתה יכול להעתיק את הקוד, בדרך כלל עושים new trigger בלחיצה ימנית והוא פותח לך חלון כזה:

    GO
    
    /****** Object:  Trigger [dbo].[Contacts_Updated]    Script Date: 27/01/2014 21:37:25 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TRIGGER [dbo].[Contacts_Updated]
    ON [dbo].[Contacts]
    after UPDATE
    AS
    BEGIN
    
    SELECT * INTO #inserted
    FROM inserted
    SELECT * INTO #deleted
    FROM deleted 
    declare @Sql nvarchar(max)  = dbo.GetSqlStatementToInsertLogTable (@@PROCID)
    	insert into LogTable (TableName , ColumnName , RowID , OldValue, NewValue ,UserModified)
    	EXECUTE sp_executesql @Sql
    
    END
    
    GO
    

    @רחמים

    אגב, את הטבלה יצרתי אבל את הפונקציה לא נתן לי שמור כל פעם הוציא הודעת שגיאה

    יש מילה GO בסוף הקוד (תיקנתי את זה עכשיו) תמחק אותה ייתכן שהיא עושה את השגיאה, אם לא אז תגיד איזו הודעת שגיאה הוא כותב.

    פורסם במקור בפורום CODE613 ב27/01/2014 21:40 (+02:00)

    ארכיון code613m

  • לאחר מאבקים עזים: קוד שמתעד כל שינוי בדטה בייס
    א ארכיטקט

    באשכול הזה היה דיון אודות פונקציה שמייקרוסופט כנראה לא סיפקו במזיד או שלא במזיד. בכל אופן נאלצנו לעשות קוד שיוצר מחרוזת sql כטקסט, ואז מממש אותה.
    כמו כל דבר טוב אני עורך את זה כמה פעמים עד להשלמה. כעת ערכתי את הפונקציה (27/01/14 22:13) על מנת לאפשר גם בטריגר של מחיקה, לשמור את כל השדות של הרשומה הנמחקת למי שירצה.

    ראשית יש ליצור טבלת לוג כזאת:

    CREATE TABLE [dbo].[LogTable](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[Content] [nvarchar](max) NULL,
    	[TableName] [nvarchar](40) NULL,
    	[ColumnName] [nvarchar](50) NULL,
    	[RowID] [int] NULL,
    	[OldValue] [nvarchar](max) NULL,
    	[NewValue] [nvarchar](max) NULL,
    	[UserModified] [nvarchar](100) NULL,
    	[date] [datetime] NULL,
     CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [dbo].[LogTable] ADD  CONSTRAINT [DF_Log_date]  DEFAULT (getdate()) FOR [date]
    GO
    
    ALTER TABLE [dbo].[LogTable]  WITH CHECK ADD  CONSTRAINT [CK_LogTable] CHECK  (([OldValue]<>[NewValue]))
    GO
    
    ALTER TABLE [dbo].[LogTable] CHECK CONSTRAINT [CK_LogTable]
    GO
    
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'מאמת שלא נכנסים ערכים שווים לטבלה' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'LogTable', @level2type=N'CONSTRAINT',@level2name=N'CK_LogTable'
    GO
    

    לאחר מכן ליצור פונקציה זאת:

    CREATE FUNCTION [dbo].[GetSqlStatementToInsertLogTable]
    (
    	@PROCID int -- משתנה זה מכיל את האידי של הטריגר הוא מוכנס על ידי משתנה מקומי שיש בכל טריגר
    )
    RETURNS nvarchar(max)
    AS
    BEGIN
    
    
    	DECLARE  @TableName sysname ,@Sql nvarchar(max) = ''  , @CurrentRow int = 0 , @CurrentFieldName nvarchar(100)
    	-- מאתר את שם הטבלה שמאחוריה עומד הטריגר שביקש את הפונקציה
    	select @tablename = object_name(parent_id) 
        from sys.triggers where object_id = @PROCID
    	
    	-- טבלה המכילה את כל השדות של טבלה נוכחית
    	declare @FieldsTable table (ColID int, ColumnName nvarchar(50), TableName nvarchar(50))
    	insert into @FieldsTable 
    	select  c.column_id as ColID, c.name as ColumnName, t.name as TableName
    	from sys.all_columns c
    		inner join sys.tables t on t.object_id = c.object_id 
    		where c.is_identity = 0  and user_type_id <> 189 and t.name = @tablename -- אין טעם להכניס אידנטיטי כי הוא לא משתנה אף פעם כמו כן סוג חותמת זמן לא שייך לתעד
     
    
     declare @maxRecords int = (select max (colid) from @FieldsTable)
    	declare @str nvarchar(max)
    	while  @CurrentRow < @maxRecords 
    	BEGIN
        SET @CurrentRow = @CurrentRow + 1
        set @CurrentFieldName = (select ColumnName from @FieldsTable WHERE ColID=@CurrentRow) -- השדה הנוכחי בטיפול
    	-- יוצר את האסקיואל שאמור לטפל בכל שדה ושדה והרוצה יעיין בקוד הדק היטב
    	set @str = N'select ''' +  @TableName + ''',''' + @CurrentFieldName + ''', d.ID, CONVERT(VARCHAR(max), d.' + @CurrentFieldName + '),  CONVERT(VARCHAR(max), i.' + @CurrentFieldName + '), ''' + SYSTEM_USER + ''' from #deleted d  left join #inserted i on i.ID = d.ID where  i.' + @CurrentFieldName + ' <> d.' + @CurrentFieldName + ' or i.ID is null' + iif(@CurrentRow < @maxRecords , ' union all ', '' )
    	set @Sql = CONCAT (@Sql, @str);
    	END	
    
    	-- זהו זה
    	RETURN @Sql
    END
    

    אחרי שיצרנו את הפונקציה יש להכניס את הקוד הבא בכל טריגר (אין צורך לעשות שום שינוי בקוד הוא נכנס כמות שהוא לכל טריגר שבעולם):

    SELECT * INTO #inserted
    FROM inserted
    SELECT * INTO #deleted
    FROM deleted 
    declare @Sql nvarchar(max)  = dbo.GetSqlStatementToInsertLogTable (@@PROCID)
    	insert into LogTable (TableName , ColumnName , RowID , OldValue, NewValue ,UserModified)
    	EXECUTE sp_executesql @Sql
    

    שימוש בקוד זה מחייב את המשתמש על סך מיליון שקלים פלוס מע"מ לכל פעולת טריגר... :lol: :lol: :lol: :lol:

    פורסם במקור בפורום CODE613 ב27/01/2014 19:45 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    Null זה כמו חור שחור בפיזיקה.... :lol: :lol: :lol: :lol: :lol: :lol:
    Empty , Nothing' Missing כל הדברים האלו לא נראה לי שיש הבדל בעולם הווב.....

    פורסם במקור בפורום CODE613 ב29/01/2014 15:57 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    הפתרון הסופי הוא שימוש בפוקנצייה CONCAT, תסתכל בקוד של תיעוד שינויים בדטה בייס שהעלתי לכאן.
    אין באמת שירשור בSQL.

    פורסם במקור בפורום CODE613 ב27/01/2014 21:42 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    עדיין עושה את הבעיה, הפעם העברתי את הקוד לפונקציה ולא מצליח להוציא משם טקסט.

    פורסם במקור בפורום CODE613 ב27/01/2014 19:14 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    יש בזה משהו, לכן אני בודק את האפשרויות שקליק וואן הציע לעשות CLR ואז נהיה חופשיים יותר. מעניין אם גם mysql מתנהג בצורה כל כך מטופשת בקוד שלו, עדיין לא צללתי לתוכו מספיק.

    פורסם במקור בפורום CODE613 ב27/01/2014 17:46 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    טוב התשובה היא שצריך להגדיר אותו קודם כמחרוזת אפס.

    פורסם במקור בפורום CODE613 ב27/01/2014 16:55 (+02:00)

    ארכיון code613m

  • שירשור טקסט sql לא עובד ומחזיר null
    א ארכיטקט

    למה sql לא מסוגל לשרשר טקסט כמו בן אדם???? למה????
    שעתיים הלכו לי על שטויות, ולא מצליח למצוא מידע נורמלי באינטרנט על ההתנהגות הזאת.

    declare @TableName sysname ,@Sql nvarchar(4000)  , @CurrentRow int = 0 , @CurrentFieldName nvarchar(100) , @Currstr nvarchar(300)
    
    set @Currstr = 'aaa'
    set @Sql = @Sql + @Currstr 
    
    	insert into LogTable (Content)
    	select @Sql
    

    השמטתי דברים שלא נוגעים לכאן, כי זה קוד ארוך.
    הערך המוחזר בטבלת לוג הוא תמיד null

    פורסם במקור בפורום CODE613 ב27/01/2014 16:52 (+02:00)

    ארכיון code613m

  • current windows user sql server
    א ארכיטקט

    @ClickOne

    יש דרך לשלוח פרטים נוספים בחיבור של הODBC?
    אני חושב שכן, הרי יש את הפרופרטי APP בקונקשיין סטרינג.
    השאלה איך מושכים את הנתונים האלו בטריגר, וגם האם באותה הדרך יש אפשרות לשלוח משתנים נוספים.

    אדרבה ואדרבה, זה בדיוק מה שאני מחפש, שהטריגרים יוכלו לדעת משהו ולו קצה חוט על המשתמש קצה, ואז אני יכול ממש למלוך על הנתונים... ולא רק לשלוט עליהם באמצעות דיכוי.... :lol: :lol: :lol: :lol: :lol:
    תראה, לעשות ODBC לכל משתמש לא נראה לי ארכיטקטי מספיק... וזה גם לתפוס את הלקוח בגרון שכל משתמש חדש צריך לעשות לו חיבור חדש וכו.

    פורסם במקור בפורום CODE613 ב26/01/2014 14:12 (+02:00)

    ארכיון code613m

  • current windows user sql server
    א ארכיטקט

    שלום לכולם
    הואיל וב odbc קשה מאוד לדעת ברמת המסד מי המשתמש, מכיוון שליצור חיבור נפרד לכל משתמש זה קצת מסורבל מידי (וגם לא בטוח שיעזור) חשבתי על פתרון פשוט להשתמש ב user name של windows. ואולם מה שנראה שהערך המוחזר באמצעות sql server שונה מהערך המוחזר באמצעות vba
    בסקל סרבר:

    SELECT SYSTEM_USER
    

    מחזיר: USER\user
    ואילו ב vba:

    (Environ$("Username"))
    

    מחזיר user בלבד!!
    פשר הדבר ידוע למישהו???

    פורסם במקור בפורום CODE613 ב26/01/2014 11:43 (+02:00)

    ארכיון code613m

  • Sql Server: משתנה אובייקט
    א ארכיטקט

    שלום רב

    אני מנסה ליצור משתנה מסוג אובייקט, או ווריאנט, או לא משנה איך תקראו לזה, העיקר לא להצהיר על הסוג מראש. האם ישנו דבר כזה???

    פורסם במקור בפורום CODE613 ב26/01/2014 00:51 (+02:00)

    ארכיון code613m

  • שגיאה בעת פתיחת קובץ אקסס סגור
    א ארכיטקט

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

    מה שכן אם ההתייחסות לרפרנס היא רק במקרים בודדים, אין צורך בכלל לעשות רפרנס לכל הפרוייקט אלא פשוט לעשות createobject וזהו.

    פורסם במקור בפורום CODE613 ב26/01/2014 10:03 (+02:00)

    ארכיון code613m

  • שגיאה בעת פתיחת קובץ אקסס סגור
    א ארכיטקט

    תבדוק אם יש לך רפרנסים, במחשבי וינדווס 8 וכן ב64 ביט, מייקרוסופט שינו את הכתובת של DLL ים מסויימים מ system32 ל syswow64 וזה שורש הבעיה שלך כנראה.

    אם למשל אתה מפני ל dll ששולח פקסים מטעם מייקרוסופט, אז בטוח זה יעשה לך את הבעיה.

    ההבדל הוא שלפני קימפול, הוא מנסה לחפש בכתובת החלופית, כשהוא נתקל בבעיה, ומתקן לבדו את הכתובת של הרפרנס, אבל אחרי הקימפול הוא לא כל כך חכם, ואז צריך לעשות גירסה פתוחה ולקמפל אותו כדי שהקימפול יתפוס את הכתובת הנכונה.

    פורסם במקור בפורום CODE613 ב26/01/2014 00:49 (+02:00)

    ארכיון code613m

  • פונקציית יצירת ערך תאריך ב sql server
    א ארכיטקט

    משהו מעניין, קצת קשה ליצור תאריך המורכב מחלקים ב sql, כלומר אתה יכול להצהיר על משתנה datetime אבל להכניס לו ערך כמקשה אחת.

    כתבתי פונקציה שעושה זאת, נראה קצת משונה שצריך לכתוב לו פונקציה שעושה פעולות משונות כדי להשיג ערך פשוט:

    ALTER FUNCTION [dbo].[DateSerial]
    (
    	-- Add the parameters for the function here
    	@Day int,@Month int,@Year int
    )
    RETURNS datetime
    AS
    BEGIN
    	-- Declare the return variable here
    	DECLARE @Result datetime
    	set @Result = (Select DateAdd(day, @Day - 1, 
              DateAdd(month, @Month - 1, 
                  DateAdd(Year, @Year-1900, 0))));
    
    	-- Return the result of the function
    	RETURN @Result;
    
    END
    

    פורסם במקור בפורום CODE613 ב25/01/2014 23:15 (+02:00)

    ארכיון code613m

  • SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון
    א ארכיטקט

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

    with cte as
    (select c.FromYear  i,ID, ToYear from CaseHandlingDates c
     union all
     select * from (select i+1 i,ID,ToYear from cte ) as c  where  c.i  <= c.ToYear)
     select i , ID , ToYear  from cte order by ID
    

    פורסם במקור בפורום CODE613 ב22/10/2014 12:33 (+03:00)

    ארכיון code613m

  • SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון
    א ארכיטקט

    עזרת, אבל מה עם mysql...

    פורסם במקור בפורום CODE613 ב30/07/2014 23:28 (+03:00)

    ארכיון code613m

  • SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון
    א ארכיטקט

    וואו זה גאוני: אבל טוחן משאבים, ולוקח 5 שניות לטעון אותו כבר עדיף טבלה זמנית... (אגב את השורה הארוכה של הסלקט האחרון 1-10 אפשר למחוק, הוא עדין נותן 1000 רשומות)

    פורסם במקור בפורום CODE613 ב30/07/2014 22:47 (+03:00)

    ארכיון code613m

  • SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון
    א ארכיטקט

    כעת צריך את זה ב mysql (בשביל מה?? בשביל טבלת זימון תורים, איך לא...) מישהו יודע???

    פורסם במקור בפורום CODE613 ב30/07/2014 22:22 (+03:00)

    ארכיון code613m

  • SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון
    א ארכיטקט

    זה נקרא CTE רקורסיבי, תחביר די מופשט וקצת קשה להבנה אבל שימושי מאוד ורב עוצמה. יש דומים לו בהרבה שפות תיכנות מבחינת עצם הביצוע, אבל ב SQL זה יחסית חדש ונועד לחסוך שימוש גס בלולאה. אני עוד לא הבנתי אותו עד הסוף, מקוה שדוד ל.ט. יכתוב איזה מדריך טוב בנושא...

    כאן יש תיעוד רשמי MSDN
    כאן יש מדריך בקוד פרוייקט

    כל היתר תשאלו את רבי שרגא יהושע העשיל מגוגל :lol:

    פורסם במקור בפורום CODE613 ב26/01/2014 09:43 (+02:00)

    ארכיון code613m
  • 1 / 1
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום