מורידים מה nuget את json.net
יוצרים struct במבנה של ה json ועושים jsonconvert.deserialize לתוך המשתנה
פורסם במקור בפורום CODE613 ב12/07/2016 11:02 (+03:00)
מורידים מה nuget את json.net
יוצרים struct במבנה של ה json ועושים jsonconvert.deserialize לתוך המשתנה
פורסם במקור בפורום CODE613 ב12/07/2016 11:02 (+03:00)
שימוש קלאסי ב Flags הוא במקרה של צורך בהעברת אוסף של הגדרות True\False שלא תלויות זו בזו לפונקציה מסוימת
כמו ב MessageBox לדוגמה, מה יהיה האייקון והאם ייושר לימין וכו', זה קריא, פשוט וחסכוני.
ל Enum שלא מוגדר כ Flags יש עוד שימושים כמו הגבלת קלט לפונקציה.
הגישה של למה להסתבך ממש מעצבנת אותי, מתכנת צריך לשאוף להכיר כל אבן מאבני הבנין של התכנות על בוריה, ואחר כך מתוך עמדה של ידע להחליט במה להשתמש ובמה לא.
פורסם במקור בפורום CODE613 ב05/07/2016 11:55 (+03:00)
תעביר אותה ל web.
בדקתי, האחד באפריל היה שבוע שעבר, אני מציע שתכניס לחתימה שלך גילוי נאות שאתה חבר בכת ההיא, אנשים עלולים לקחת את התשובות שלך כעצות אובייקטיביות.
עכשיו ברצינות, MAT מתכוון כנראה למעלה של WEB שהוא מעביר חלק מהעיבוד לצד הלקוח וכך חוסך במשאבים.
מצד שני זוהי לא תשובה לשאלה ששאלת ואף תשובה שאיננה נכונה בהמון סיטואציות כמו תוכנות ללא ממשק משתמש או שמשתמשות ב API ישנים, ועוד.
התשובה לשאלתך היא כן.
פורסם במקור בפורום CODE613 ב03/04/2016 14:55 (+03:00)
אחרי שעשו לי פה שיימינג ....
אין לי את הזמן להכין פה קורס בנושא וזה לא תחום שניתן ללמד אותו על קצה המזלג, עשיתי פעם קורס מקיף בנושא שכבר המלצתי עליו כאן.
החלק הרלוונטי ממנו:
https://lagunita.stanford.edu/courses/DB/Indexes/SelfPaced/courseware/ch-indexes
כל הקורס מאוד מומלץ (מחולק למיני קורסים) שזה כאן:
https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about
ממליץ לראות את הסרטונים בסבלנות, לעשות את הבוחן בכל שלב ובכללי ללכת ללפי הקו שלהם ולא לדלג.
אחרי שהשואלים יואילו ללמוד את הקורס הקצר הזה, אני יואיל לענות בנושא מעל דפי הפורום.
לאדוקים במיוחד: המרצה היא אישה והראש שלה מופיע בסרטונים בריבוע בצד ימין למטה.
פורסם במקור בפורום CODE613 ב03/04/2016 13:18 (+03:00)
כבר דנו בזה בעבר פה - חפש cors בפורום
הטעות שלך היא שאתה צריך להחזיר את הheader הזה מהשרת ולא לשלוח אותו, לזה שאתה שולח אותו אין שום משמעות.
התורה על רגל אחת:
כשאתה שולח בקשה מהקוד שלך לכתובת שאינה הכתובת של הדף כלומר איננה שייכת לך, הדפדפן מוודא שהבעלים של התוכן ההוא מאשר לך להציג את התוכן שלו אצלך.
בשביל לשאול אותו את זה הדפדפן שולח קודם בקשת http ב method שנקרא options ומקבל מהשרת תשובה האם ואיפה להרשות את תצוגת התוכן, אם השרת לא החזיר header כזה בכלל זה אומר שהוא לא מרשה לאף אחד, וממילא הדפדפן חוסם את הקריאה, אם החזיר עם כוכבית אז הוא מרשה לכולם ואפשר כמובן לאפשר כתובת ספציפית עם ובלי wildcards.
אם אתה בעל השרת אתה צריך לגרום לשרת שלך להחזיר את ה header עם התשובה המתאימה ואיך לבצע את זה כבר תלוי בפלטפורמה של השרת.
Jsonp "עובד" על הדפדפן בכך שהוא משתמש בפירצה שהדפדפן כן יודע לטעון קבצי סקריפט ממקורות זרים ומביא קטע קוד שבעצם מביא בסוף את הdata אבל זה דורש response במבנה מסוים ולכן אם השרת לא שלך זה לא עוזר.
אפשר כמובן בצורה סיבובית לשלוח בקשה לשרת שלך ושם לבצע את הבקשה לשרת הזר ולהחזיר את המידע אליך לדף אבל אז ה request הוא מה ip שלך וזה יותר מאובטח כי בעצם המטרה של כל זה שלא יוכלו לתקוף את האתר שלך דרך דפדפנים של משתמשים תמימים.
לסיום, מכיוון שהפונקציונאליות הזו היא ברמת דפדפן אז יש תוספים שגורמים לדפדפן כן להציג הכל על ידי התערבות בresponse והוספת header כרצונך, כמובן שברוב המקרים אתה לא יכול לבקש מכל מי שיגלוש לאתר שלך שיתקין את התוסף לדפדפן שלו. חפש cors בחנויות התוספים.
פורסם במקור בפורום CODE613 ב28/01/2016 23:51 (+02:00)
var myDate = new Date(parseInt("\/Date(1423087200000+0200)\/".match(/\d+/)[0]));
מקור
פורסם במקור בפורום CODE613 ב27/12/2015 12:47 (+02:00)
וואקשה
----Create Demo DB
--Rooms Table
DECLARE @Rooms AS TABLE(ID INT, Name NVARCHAR(MAX))
INSERT INTO @Rooms VALUES(1,'Room A'),(2,'Room B')
--Reservations Table
DECLARE @Reservations AS TABLE(ID INT, CheckInDate DATE, CheckOutDate DATE, RoomID INT)
INSERT INTO @Reservations VALUES
(100,'2015-01-03','2015-01-09',1),(102,'2015-01-18','2015-02-09',1),(103,'2015-01-01','2015-01-17',2)
DECLARE @Seasons AS TABLE(ID INT, Name NVARCHAR(MAX), StartDate DATE, EndDate DATE)
INSERT INTO @Seasons VALUES
(1,N'Winter','2015-01-01','2015-04-15'),(2,N'Spring','2015-06-18','2015-06-25')
; ----End of Demo DB
---- occupancy query (could be used as a view)
-- Generate Calendar Table
WITH Cal (CalendarDay) AS(
SELECT CAST('2015-01-01' AS DATE) AS DateDay -- Calendar Start Date
UNION ALL
SELECT DATEADD(DAY,1,CalendarDay) FROM Cal WHERE DATEADD(DAY,1,CalendarDay) < '2016-01-01' -- Calendar End Date
)
SELECT CalendarDay,Rooms.ID AS RoomID, Rooms.Name AS RoomName,Season.Name AS SeasonName,
Res.ID AS ReservationID, CheckInDate, CheckOutDate,
CASE WHEN Res.ID IS NULL THEN 1 ELSE 0 END IsRoomAvailable
FROM Cal
CROSS JOIN @Rooms AS Rooms -- create rooms calendar table (cartesian product)
INNER JOIN @Seasons AS Season ON Cal.CalendarDay BETWEEN Season.StartDate AND Season.EndDate
LEFT JOIN @Reservations AS Res ON Rooms.ID = Res.RoomID AND CalendarDay BETWEEN CheckInDate AND CheckOutDate -- join the reservations
OPTION (MAXRECURSION 32767) -- allow recursion
פורסם במקור בפורום CODE613 ב22/12/2015 23:45 (+02:00)
שכלול של קטע שפרסמתי בעבר, זה פרוצדורה שיוצרת טבלה באותו שם עם תחילית H_ וגם טריגר ששומר כל פעולה של שינוי דאטה.
השכלול העיקרי הוא שהוא יודע כעת להתמודד עם טבלאות עם כמה עמודות PK וגם עם טבלאות בלי PK ואם אין בכלל PK אז לוקח IDENTITY (אם יש).
על מנת להפעיל שמירת היסטוריה על טבלה מריצים את הפרוצדורה עם פרמטר של שם הטבלה, אחרי שינוי במבנה הטבלה יש להריץ שוב.
CREATE PROC [dbo].[CreateTableTriggers] (@Table NVARCHAR(MAX)) AS
SET NOCOUNT ON
DECLARE @CName AS NVARCHAR(MAX)
DECLARE @TName AS NVARCHAR(MAX)
DECLARE @TCol AS TABLE(name NVARCHAR(MAX), typ NVARCHAR(max))
INSERT INTO @TCol
Select C.name,T.name from sys.columns C inner join sys.types T ON T.user_type_id = C.user_type_id where Object_id(@Table) = object_id AND C.user_type_id NOT IN (34,165,173)
DECLARE @DKey AS NVARCHAR(MAX)
DECLARE @IKey AS NVARCHAR(MAX)
DECLARE @TKey AS TABLE(name NVARCHAR(MAX), sort int)
INSERT INTO @TKey
SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + CONSTRAINT_NAME), 'IsPrimaryKey') = 1 AND TABLE_NAME = @Table AND TABLE_SCHEMA = 'dbo'
SET @DKey = (SELECT stuff((select ' + ''_'' + CAST(D.' + name + ' AS NVARCHAR(4000))' as [text()] FROM @TKey ORDER BY sort for xml path('')), 1, 9, ''))
SET @IKey = (SELECT stuff((select ' + ''_'' + CAST(I.' + name + ' AS NVARCHAR(4000))' as [text()] FROM @TKey ORDER BY sort for xml path('')), 1, 9, ''))
IF(@DKey IS NULL OR @IKey IS NULL)
BEGIN
SET @DKey = (SELECT TOP 1 'CAST(D.' + name + ' AS NVARCHAR(4000))' FROM sys.columns where Object_id(@Table) = object_id and is_identity = 1)
SET @IKey = (SELECT TOP 1 'CAST(I.' + name + ' AS NVARCHAR(4000))' FROM sys.columns where Object_id(@Table) = object_id and is_identity = 1)
END
IF(@DKey IS NULL OR @IKey IS NULL) RAISERROR ('No Key or Identity column found.',16,1);
DECLARE @sSQL AS NVARCHAR(MAX) =
'
CREATE TRIGGER {Table}History ON {Table} AFTER UPDATE, INSERT, DELETE AS
SET NOCOUNT ON
INSERT INTO H_{Table}
SELECT GETDATE(),APP_NAME(),{I.KEY},''Object'',{I.KEY},'''', ''I'' FROM INSERTED I LEFT JOIN DELETED D ON {D.KEY} = {I.KEY} WHERE {D.KEY} IS NULL
UNION
SELECT GETDATE(),APP_NAME(),{D.KEY},''Object'',{D.KEY},'''', ''D'' FROM DELETED D LEFT JOIN INSERTED I ON {D.KEY} = {I.KEY} WHERE {I.KEY} IS NULL
'
DECLARE col_cur CURSOR FOR SELECT name, typ FROM @TCol
OPEN col_cur
FETCH NEXT FROM col_cur INTO @CName,@TName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @Compare AS NVARCHAR(MAX)
IF (@TName IN ('int','decimal','numeric','bigint'))
SET @Compare = 'ISNULL(D.{Col},0) <> ISNULL(I.{Col},0)'
ELSE
SET @Compare = 'ISNULL(D.{Col},'''') <> ISNULL(I.{Col},'''')'
SET @sSQL +=
REPLACE('
INSERT INTO H_{Table}
SELECT GETDATE(),APP_NAME(),{I.KEY},' + '''{Col}''' + ',D.{Col},I.{Col}, ''U'' FROM DELETED D INNER JOIN INSERTED I ON {D.KEY} = {I.KEY} WHERE ' + @Compare + '
','{Col}',@CName)
FETCH NEXT FROM col_cur INTO @CName,@TName
END
CLOSE col_cur
DEALLOCATE col_cur
DECLARE @sDropSQL AS NVARCHAR(MAX) = REPLACE('IF OBJECT_ID (''{Table}History'',''TR'') IS NOT NULL
DROP TRIGGER {Table}History','{Table}',@Table)
EXEC(@sDropSQL)
DECLARE @sTableSQL AS NVARCHAR(MAX) = REPLACE('
IF OBJECT_ID (''H_{Table}'') IS NULL
CREATE TABLE H_{Table}
(
ChangeDate DATETIME NULL,
ApplicationName NVARCHAR(4000),
[Key] NVARCHAR(MAX),
ColumnName NVARCHAR(100) NULL,
OldValue NVARCHAR(MAX) NULL,
NewValue NVARCHAR (MAX) NULL,
Action NVARCHAR (1)
)
','{Table}',@Table)
EXEC(@sTableSQL)
SET @sSQL = REPLACE(@sSQL,'{Table}',@Table)
SET @sSQL = REPLACE(@sSQL,'{D.KEY}',@DKey)
SET @sSQL = REPLACE(@sSQL,'{I.KEY}',@IKey)
EXEC(@sSql)
פורסם במקור בפורום CODE613 ב29/11/2015 13:17 (+02:00)
VARBINARY
Byte[]
פורסם במקור בפורום CODE613 ב25/10/2015 17:18 (+02:00)
א. <use strict>? אתה מכניס א"ז בקביעות לסקריפטים שלך?
כן.
@אהרן
ב. מה??
תחשוב על with כמו import שעושים ב C# למרחב שמות לדוגמה אם תרשום ב JS ככה:
var r = 10;
with (Math) {
x = r * cos(PI);
}
זה זהה ל:
var r = 10;
var x = r * Math.cos(Math.PI);
console.log(x);
זה פשוט חוסך את ההקלדה של מרחב השמות / המשתנה שעליו בוצע ה with, וכך גם במקרה שלנו ב forEach, בגלל שהוא בתוך בלוק של with על המערך לא צריך לרשום את שם המערך.
אגב זו תכונה מאוד בעייתית איך שמימשו אותה ב JS, ב VB לדוגמה אתה לא צריך להקליד את שם המשתנה אבל צריך להקליד נקודה במקום,
במימוש הזה זה יכול לגרום לבלבול, לדוגמה כאן הוא ידפיס את x מתוך o, שזה לא קריא בכלל:
function test(o,x) { with(o) {alert(x);}}
var o = {x:'test1'};
test(o,'test2');
ואם אין x ב o אז הוא כן ידפיס את הפרמטר x:
function test(o,x) { with(o) {alert(x);}}
var o = {u:'test1'};
test(o,'test2');
לעיון נוסף
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with
פורסם במקור בפורום CODE613 ב18/08/2015 11:49 (+03:00)
ואני לתומי חשבתי שהמטרה בפורום דנן הוא לעזור לאנשים המתחילים את דרכם בעולם התכנות ולשם כך השקעתי פה עד היום מזמני
נ.ב. נכתב אחרי שסיימתי את התוספת (למודל qlikview, אגב) ללקוח שלי. . .
פורסם במקור בפורום CODE613 ב30/07/2015 02:32 (+03:00)
אני מעדיף LINQ לפעולות שאני יודע מראש מה אני הולך לבצע, למרות שאין להשוות את הביצועים ל SQL, לרשום טבלה ל DB זה גם מעמיס על הביצועים.
אבל אכן מימשתי בעבר כזה דבר, רצו שאני יפתח מודול קליטת דפי בנק ל SAP (למי שלא ידע - אני מתמחה בSAP BUSINESS ONE) וזה חברה בינלאומית עם המון בנקים ופורמטים שונים אז הלכתי על ארכיטקטורה כזו:
אני קולט את הקובץ ורושם את תוכן הקובץ לטבלה כמו שהוא - מחולק לשורות, ואז כל פורמט שאני מפתח הוא בעצם שאילתת SQL שהסטרינג שלה נשמר בטבלה ואני מריץ את הסטרינג הזה מול הטבלה שמכילה את תוכן הקובץ ויש לי גמישות מקסימלית, עם כמה פונקציות עזר ב SQL כמו split לימדתי אותם לעבוד עם זה, והיום הם כבר לא צריכים אותי לפתח קליטת פורמטים חדשים . . .
פורסם במקור בפורום CODE613 ב26/07/2015 23:13 (+03:00)
@דוד ל.ט.
@softs
אם אתה בונה דינאמי ה SqlParameter לא מגן עליך יותר מהשיטה שהצגתי, למעשה זה בדיוק מה שהוא עושה.יש מעלה מאוד גדולה להשתמש בקוד של אחרים ולא לכתוב את אותו הקוד לבד.
המעלות הם חיסכון בהקף הקוד, בתחזוקה, ובקריאות - כל מתכנת שמח למצוא מתודה מוכרת מאשר מימוש פרטי של עמית.
ראשון ראשון, ואחרון אחרון:
חיסכון בהיקף הקוד הוא דווקא שימוש ב escape כי השימוש ב SqlParameter הופך קוד לארוך יותר
קוד שלי לשליפת טבלה נראה כך:
'
Dim tbl As DataTable = DB.GetDatatable("SELECT * FROM ReportHeader WHERE CustomerName=" & DB.SqlEscape(name))
ואני גם חושב שהוא גם קריא יותר.
לגבי היכרות עם תשתיות, ומתכנתים ששמחים למצוא מימושים מוכרים, אני חושב שזה זניח ביחס לעבודה של להיכנס לקוד של מישהו אחר.
מה גם שממתודות "לא מוכרות" של אחרים למדתי הרבה מאוד, אז לא תמיד זה שלילי. . .
@דוד ל.ט.
ויש עוד סיבה, שהיא הימנעות משגיאות. להסתכל בוד המקור של מקרוסופט ולהעתיק זה בטוח מבחינת זה, אבל "לטהר קלט לבד" הכוונה לממש את זה עם אי אלו הבדלים (נניח לאפשר איזשהיא תגית נוספת או לאסור יותר), וזה מ-א-ו-ד מסוכן מבחינת אבטחה, כי בן אדם טועה כשהוא כותב קוד לעיתים קרובות. זו כוונת הספר. הוא מביא שם אף דוגמה של מפתחי stackoverflow שמימשו escape לבד ונפלו עם שכחה קטנה, שהביאה פריצה.
לא ברור למי מופנית התשובה שלך, ראית שכתבתי שאני תומך בכזו שיטה? אני חושב שהסברתי מספיק טוב מה ההבדל בין escape ל sanitizing(טיהור).
טיהור קלט לבד זה אסור, מפתחי stackoverfolw כנראה שמימשו לבד טיהור ולא escape, בשיטה של escape אתה לא מנסה לעלות על כל הפרצות האפשריות אלא מוודא שבטוח הקלט ייכנס כסטרינג לשאילתה.
פורסם במקור בפורום CODE613 ב24/06/2015 18:16 (+03:00)
וחוץ מזה שהספר יצא לפני יותר משנה וחצי ובמושגים של NET ואבטחת מידע זה נצח...
אני עוקב היטב אחר השינויים והחידושים בתחום ונראה מהפורום שגם דוד ל.ט. עוקב, אני יכול לומר שאכן יש שינויים אבל הבסיס לא משתנה,
גם תשובה שתקרא ב stack overflow לפעמים נכתבה לפני שנה או יותר.
לעניות דעתי ספר מלפני שנה וחצי הוא בהחלט מעודכן ממש (אם הוא היה מעודכן כשנכתב כמובן) ואחרי שמסיימים צריך להמשיך לעקוב בעצמך.
בין כה אין סיכויי שרידות גבוהים למתכנת שלא יודע להתעדכן בכוחות עצמו.
דוד ל.ט. תקן אותי אם אתה חושב שאני טועה.
לגבי התרגום לעברית זה בעיה קשה, לפעמים המתרגם חושב שהוא יישמע מתוחכם יותר אם יאלץ ביטוי בעברית
לדוגמה I couldn't care less שמי שמתרגם אותו "לא יכול להיות אכפת לי פחות" מחבל בכל ענין התרגום
אגב יש צורות שכבר נכנסו לשפה בעקבות כאלו תרגומים כמו הביטוי "אי אפשר להפריז בחשיבותו של.." וכו'
פורסם במקור בפורום CODE613 ב10/06/2015 14:07 (+03:00)
חישוב מרחקים בין נ"צ
DECLARE @EarthSRID INT = 4326 -- קבוע לכדור הארץ
DECLARE @GeoLocation1 geography = geography::Point(31.778114, 35.235983, @EarthSRID)
DECLARE @GeoLocation2 geography = geography::Point(31.771672, 35.229502, @EarthSRID)
SELECT @GeoLocation1.STDistance(@GeoLocation2) -- מרחק אווירי במטרים
פורסם במקור בפורום CODE613 ב10/05/2015 15:59 (+03:00)
linked server יכול גם לחבר קבצי אקסל, אקסס ואפילו CSV
פורסם במקור בפורום CODE613 ב10/05/2015 15:41 (+03:00)
השאלה האמיתית היא איזה קפה? כי יש קפה ויש קפה...
איפה ה while?
פורסם במקור בפורום CODE613 ב23/03/2017 17:57 (+02:00)
@דוד ל.ט.
נסה אותו: התנתק מחשבונך בדפדפן, וכשתקבל הודעה חדשה עם חיווי הקלק לפתיחה בדפדפן. נפתח ההודעה בלי שום אימות?
כמובן שזה דורש Login מחדש . . .
אולי הכוונה על זה שהוא מציג את ההודעות בחלונית הקטנה אבל שם זה פשוט מציג את ה HTML של ההודעה ולא מתוך ה UI של המערכת
פורסם במקור בפורום CODE613 ב19/04/2015 16:08 (+03:00)
כמו שבטח הבנת אי אפשר לכתוב ידנית בקוד האוטומטי כי זה יידרס בפעם הבאה שהקוד יתעדכן,
אני לא מכיר EF אבל בחשיבה פשוטה של OOP תירש את הקלאס הזה לקלאס שלך ושם תעשה בקונסטרקטור מה בא לך . . . (אא"כ הוא sealed)
אם אנחנו מדברים ספציפית על EF, ר' גוגל מצא לי משהו מעניין: יש את הענין של Partial Class, למי שלא מכיר בקצרה זה אומר שאתה יכול ליצור עוד קובץ לקלאס מסוים ולהוסיף בו עוד מתודות שיהיו חלק מהקלאס
ועל אותו רעיון יש גם Partial Methods שמתודה שנמצאת בקלאס האוטומטי יכולה להמשיך בקלאס השני, במקרה שלך הבעיה היא שאין PARTIAL CONSTRUCTOR (עדיין)
אבל בכ"ז יש פתרון כי ה EF בסוף הקונסטרקטור שלו קורא ל Partial Method בשם OnCreated אז פשוט תייצר partial class לקלאס האוטומטי ושם תשים Partial Method בשם OnCreated ושים שם את הלוגיקה
מקור:
פורסם במקור בפורום CODE613 ב24/03/2015 03:14 (+02:00)
CREATE PROC [dbo].[ExportTable] (@TableName NVARCHAR(MAX) , @FileName NVARCHAR(MAX)) AS
DECLARE @FileContents VARCHAR(MAX)
DECLARE @FieldNames VARCHAR(MAX)
SET @FieldNames =
(SELECT SUBSTRING(( SELECT ',' + '' + name + '' FROM sys.columns WHERE Object_id = Object_ID(@TableName)FOR XML PATH('')),2,200000) AS CSV)
SET @FileContents =
(SELECT SUBSTRING(( SELECT ',' + 'CHAR(34) + CAST([' + name + '] AS NVARCHAR(MAX)) + CHAR(34)' FROM sys.columns WHERE Object_id = Object_ID(@TableName)FOR XML PATH('')),2,200000) AS CSV)
declare @sql varchar(8000)
select @sql = 'bcp "select ''' + @FieldNames + '''" queryout ' + @FileName + '_headers.csv -c -t, -T -S' + @@servername
exec master..xp_cmdshell @sql
select @sql = 'bcp "select ' + @FileContents + ' from ' + DB_NAME() + '..' + @TableName + '" queryout ' + @FileName + '_Lines.csv -c -t, -T -S' + @@servername
exec master..xp_cmdshell @sql
DECLARE @FinalFileName AS NVARCHAR(MAX) = '' + @FileName + '.csv'
SET @sql = 'copy ' + @FileName + '_headers.csv+' + @FileName + '_Lines.csv ' + @FinalFileName
exec master..xp_cmdshell @sql
SET @sql = 'del ' + @FileName + '_headers.csv, ' + @FileName + '_Lines.csv'
exec master..xp_cmdshell @sql
שימוש לדוגמה
[ExportTable] 'Monthly_DailyFlatFile', 'C:\test1'
פורסם במקור בפורום CODE613 ב08/02/2015 15:22 (+02:00)