זיהוי גרסת SQL Server בחיבור מרוחק

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

אני באופן אישי מבצע את החיבור דרך Sql Server Management Studio 2008 אבל כמובן שאני יכול להתחבר לכול גרסה של בסיס נתונים קודמת מה שיכול להיות מאוד מבלבל.

כמו כן, על מכונת הפיתוח שלי אני מריץ שתי גרסאות של core, גם 2005 וגם 2008, כדי שאוכל לייצא את הנתונים בצורה תקינה לשרתי הproduction או הtest.

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

9-12-2010 12-06-29 PM

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

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

הנה הסקריפט

CREATE TABLE #SqlServerInformation(
editionText char(30),
versionText char(250),
productVersionText char(20),
levelText char(20))

INSERT INTO #SqlServerInformation (editionText, versionText, productVersionText, levelText)
VALUES (
CONVERT(char(30), SERVERPROPERTY('Edition')),
CONVERT(char(250), @@version),
CONVERT(char(20), SERVERPROPERTY('ProductVersion')),
CONVERT(char(20),SERVERPROPERTY('ProductLevel'))
)

SELECT * FROM #SqlServerInformation

drop table #SqlServerInformation

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

אשמח לתגובות

מחיקת כול הטבלאות מבסיס נתונים Sql

שלום לכולם,

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

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

אז כתבתי קצת קוד שמבצע בדיוק את זה.

הקוד יכול להדפיס את הבקשות, או לבצע אותן, פשוט מעבירים את ההערה משורה 22 לשורה 23 ואז הקוד יתבצע במקום להיות מודפס.

הקוד מתחשב גם בScheme של הטבלה ולא עובד רק עם dbo אז הוא יעבוד עם כול בסיס נתונים שלכם.

הקוד נבדק על Sql 2005 בלבד

   1: DECLARE @dropSql nvarchar(1000)

   2: DECLARE DropSequence CURSOR LOCAL FAST_FORWARD

   3:

   4: FOR

   5:     SELECT

   6:         N'DROP TABLE ' + QUOTENAME(TABLE_SCHEMA) + N'.' + QUOTENAME(TABLE_NAME)

   7:     FROM

   8:         INFORMATION_SCHEMA.TABLES

   9:     WHERE

  10:         TABLE_TYPE = 'BASE TABLE'

  11:             AND

  12:         OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + N'.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0

  13:

  14:     OPEN DropSequence

  15:     WHILE 1 = 1

  16:         BEGIN

  17:             FETCH NEXT FROM DropSequence INTO @dropSql

  18:

  19:                 IF @@FETCH_STATUS <> 0 BREAK

  20:                     RAISERROR (@dropSql , 0, 1) WITH NOWAIT

  21:

  22:             --EXEC(@dropSql )

  23:             PRINT @dropSql

  24:         END

  25:

  26: CLOSE DropSequence

  27: DEALLOCATE DropSequence