编写SQL Server Management Studio插件

The Black Art of Writing a SQL Server Management Studio 2005 Add-In

from: http://jcooney.net/archive/2007/11/26/55358.aspx 

It all started with me writing this kind of T-SQL query over and over:
Select * from sysobjects where xtype = ‘U’ and name like ‘%foo%’
For the longest time I’ve wanted to write a SQL Server Management Studio (SSMS) add-in that would allow me to search for schema entities like tables and stored procedures by name non-modally to help me find things in “big” schemas. SSMS already has a schema entity search/filter feature built-in. You launch it by clicking the button with the funnel-shaped icon as shown in the screen-shot below. I wasn’t too enamoured with this since it launches a modal dialog, it only lets you search across one database, and only for one kind of thing at a time (table, stored procedure, view etc). Yes, I am that confused/lazy that I may not know which database I want to look at when I start.

SSMS Filter Functionality

Instead I imagined something where I could press a key to launch the “search” functionality, start typing and see anything that loosely matched what I had typed. Then when I found what I wanted I could click on it in the list of results and go to that item in the object explorer.

Downloads

Download the MSI here if you just want to use the add-in   

Download the code here if you want to modify the add-in or create your own

So Why Does This Qualify as a Black Art?
Writing add-ins for SSMS is something of a black art. It’s not supported, the APIs aren’t documented or designed for extensibility, and it’s really only possible by virtue of the fact that SSMS is built on top of the Visual Studio codebase. The only decent coverage I was able to find on the web was this article on ASP Alliance which doesn’t provide any code.  I’m hoping by writing this post and providing a working add-in I can start a revolution in SQL Server Management Studio add-in writing.

Why You Should Write a Cool Add-In
So I can use it. So other developers can use it. Writing stuff against supported, published, documented APIs is....well...quite frankly it’s passé. With intellisense and google and codeproject and the MSDN and blogs even infrastructure people can write code these days. So where’s the fun? It’s here my friends – all the pain of the Visual Studio object model combined with the added bonus of being unsupported and undocumented!

Starting a new Add-In Project
Creating a new SSMS add-in is very much like creating a new Visual Studio 2005 add-in. Expand the “Other Project Types” node on the left-hand side of the “New Project” dialog and select the “Extensibility” node. Then choose a Visual Studio Add-in.

Select New Addin Project Type

Step through the rest of the Visual Studio Add-in wizard, and examine the output. You should have a project that looks something like the following:

You can delete the .AddIn files – Visual Studio 2005 switched to a nicer, registry-free way of add-in registration using XML files, however SSMS does not seem to use these. Instead for SSMS to use your add-in you’ll need to add some information about it to the windows registry.

Add-In Registration
As a .NET developer you probably hardly ever have to look at the registry. For those of you young enough to have never done any Microsoft development before .NET you’ve probably NEVER had to look at the registry. That’s all about to change, because registering your SSMS add-in is ALL about the registry.
To register your add-in you’ll have to add the following keys and values to the registry: 

Key NameTypeValue
CommandLineSafeREG_DWORD[0=addin is not necessarily command-line safe and may display UI, 1=command-line safe]
LoadBehaviorREG_DWORD[0=manually loaded, 1=loaded automatically]
ProductDescriptionREG_SZ[a textual description of your add-in]
ProductNameREG_SZ[the name of your add-in]
SatelliteDllNameREG_SZ[name of the dll your add-in lives in]
SatelliteDllPathREG_SZ[path on the file system to where your add-in will be installed]

All of this information should be contained in a registry key with the namespace of your add-in, and the type inside that namespace that implements IDTExtensibility2. If you created a new add-in via the wizard in Visual Studio this will be .Connect. 
There are a few different places in the registry this registry key can live. One is Computer/HKLM/SOFTWARE/Microsoft/Microsoft SQL Server/90/Tools/Shell/Addins/ (or Computer/HKLM/SOFTWARE/Wow6432Node/Microsoft/Microsoft SQL Server/90/Tools/Shell/Addins/ for x64 based versions of windows).
Another is the equivalent registry hive for the current user: Computer/HKCU/SOFTWARE/Microsoft/Microsoft SQL Server/90/Tools/Shell/Addins/ - I think this is a better place to register your add-in because it isn’t x86/x64 specific, and can be written to without admin privileges. The downside is that it will only register the add-in for that user. Adding this registration information as part of the add-in deployment is handled by the Registry target in the setup project.
If some aspect of your add-in registration is incorrect or your add-in throws an exception on load you will see the following error message:

addin failed to register error message

Clicking “Yes” here will delete the registration information for the add-in in the registry, so don’t do that unless you like re-typing all that stuff. Once you get the registry stuff right you should probably export the key as a back-up in case you accidentally DO click yes one time, or if you want to develop on a different machine.
SSMS is based on the Visual Studio shell, which still uses COM extensively. For this reason the type in your add-in that implements IDTEExtensivility2 and handles the “plumbing” inside of SSMS needs to be COM-visible, and registered (hence the GUID attribute on the Connect class if you ran the Visual Studio add-in wizard). Visual Studio handles the registration when you build the add-in on your machine, but you’ll need to take care of that when you deploy your add-in to other users to get past the classic “but it works on my machine” problem.
You do this in your installer project by changing the Register property on the assembly from vsdraDoNotRegister to vsdraCOM as shown here

setting COM registration property in installer project

Add-In Debugging
To debug the add-in I set the “Debug” option to “Start external program” and provide a path to the SQL Server Management Studio executable as shown in the following screen shot.

Add-in debugging properties tab

For x86 systems this will typically be something like:
C:/Program Files/Microsoft SQL Server/90/Tools/binn/VSShell/Common7/IDE/SqlWb.exe
For x64 it might look something like this:
C:/Program Files (x86)/Microsoft SQL Server/90/Tools/binn/VSShell/Common7/IDE/SqlWb.exe

The SSMS Object Model
SQL Server Management Studio must have once been known as SqlWorkbench, based on the assembly and executable names. The foundation for understanding the managed code in SSMS is an assembly called SqlWorkbench.Interfaces.dll (typically located in the following location: C:/Program Files/Microsoft SQL Server/90/Tools/binn/VSShell/Common7/IDE/SqlWorkbench.Interfaces.dll – add an ‘ (x86)’ in after “Program Files” for an x64 machine)
This assembly contains 5 namespaces which in turn contain many classes and interfaces for interacting with SSMS. Since the purpose of this assembly seems to be a place to define common interfaces it is unsurprising that the majority of types in this assembly are interfaces. The namespaces are:

  • Microsoft.SqlServer.Management
  • Microsoft.SqlServer.Management.QueryExecution
  • Microsoft.SqlServer.Management.SqlMgmt
  • Microsoft.SqlServer.Management.UI.VSIntegration
  • Microsoft.SqlServer.Management.UI.VsIntegration.ObjectExplorer

The concrete classes that implement these interfaces (which you will be dealing with at run-time) seem to be located in separate assemblies of their own. For example the Object Explorer concrete classes are in the ObjectExplorer.dll assembly, which should be in the same directory as theSqlWorkbench.Interfaces.dll. The reflector class browser was invaluable (as always) when trying to find my way around the object model. I’d advise you to add every single managed dll in the same directory as SqlWorkbench.Interfaces.dll into reflector and use the search functionality (search is the new UI) in that tool to find your way around.

SSMS uses another API called Sql Management Objects (or SMO for short) for lots of things. Unlike the SSMS APIs SMO is a fully documented, supported piece of code developed by the SQL team for administering SQL Server. SMO is the logical successor to DMO, a COM API for administering SQL Server 2000.  SMO is fully managed and one of the best-designed APIs I’ve come across in recent times. If you want to script out SQL objects, enumerate through tables/views/columns or programmatically manipulate your SQL database this is the way to do it. In developing add-ins I would try to leverage SMO as much as possible since it integrates well with SSMS, and is much better documented and supported.

Since SSMS is built on Visual Studio knowledge of the Visual Studio object model is also quite helpful. Visual Studio makes extensive use of the “service provider“ design pattern, and the IServiceProvider interface. Many, many objects in the VS object model (and SSMS also) implement this interface, or inherit from other objects that implement this. This API is means you should always be able to “get“ the type you need, and presumably makes the object model smaller and less confusing. Unfortunately I find it hard to use, since there feels like less guarantees about if GetService will return you anything, and under what circumstances this might happen. Also the very high granularity of objects in the VS object model usually means it is hard to know which type to ask for, as there are often several likely-sounding candidates.

Adding Fuzzy Search
My original vision for searching for tables and stored procedures in the schema using T-SQL always involved a “%LIKE%” type search, and I wanted my add-in to continue in this tradition as much as possible. Fortunately I was able to find a commercial component called highlight express developed by a small ISV ShuffleText. They were keen for feedback, and the code changes required to use their stuff were so modest I decided to give it a go. I’ve been really happy – their stuff is all pure .NET code and runs quite fast. Now I keep thinking of other places a fuzzy text search would be useful – my messenger buddy list, Intellisense, active directory lookups, there are lots of places for non-exact-match searching could be used.

Add-Ins and Management Studio Express
Microsoft offer an express version of SSMS for administering SQL Server Express instances (or other SQL Server instances if necessary). Unfortuately I was unable to get my add-in to load and run inside the Express version. The SSMS tools pack (another free but not open-source) SSMS add-in say that they support SQL Server Management Studio Express. Other posts such as this one make it seem even less supported. SqlAssist (a pretty cool commercial product which to my knowledge is written as an add-in in the same manner I have described) states that the express version of SSMS does not allow add-ins.  

TODO Tasks and Excuses for my Lame Add-in Code
Q:
 Does it work in SQL Server 2008 (Katmai)?
A: The add-in doesn’t work in the latest (NOV 2007 CTP) of SQL Server 2008 (Katmai). It loads and doesn’t crash, but doesn’t work either. Naturally I’d prefer if it did work.

Q: Why do you have a static “Current” property on the SearcherController? Don’t you know Singletons are evil?
A: I wanted to pass an instance of a SearcherController to the add-in UI ala dependency injection. I even created an interface IObjectSearcherUI which exists solely to allow the SearcherController to be injected. The CreateAddinWindow method of the SearcherController actually creates the VS toolwindow that hosts the add-in UI, however I was unable to find a way to get hold of an instance of the SearcherToolWindow in order to inject the dependency. I’ve left the interface in there in the hopes that I (or one of my clever readers) can show me how to get hold of the window instance, and get rid of the singleton forever!

Q: Why is the UI part factored out from the rest of the add-in? You’ve hard-coded which control you’re going to instanciate so what’s the point?
A: I thought about writing two UIs – one in WPF and one in WinForms. If WPF was present I was going to load that, and otherwise fall back to the legacy winforms, however I didn’t get around to implementing both.

Q: You only search on databases, tables, views and stored procedures – could you search on columns or user defined functions too?
A: Certainly. To do that you should enhance the BuildDBObjectDictionary method in the DatabaseObjectSearcher, the searchText_TextChanged event handler in the SearcherToolWindow and probably the ObjectExplorerManager to handle the correct “drill down” to the right level.The code inside the ObjectExplorerManager is probably the ugliest code in the whole solution.

Q: Why the ugly reflection hacks in the ObjectExplorerManager?
A: Those methods weren’t included in the interface that the ObjectExplorer exposed (IExplorerManager) but were necessary for me to “drill down” into the tree-view and select an item. I wish there had been another way.

Q: I tried to connect to a remote SQL Instance with a bazillion databases over a dial-up connection and your add-in didn’t seem to do anything. What’s going on?
A: When the add-in loads it builds a dictionary of all the things you might want to search on. If lots of data has to be retrieved from remote servers over slow networks then that is going to be slow. We lock the dictionary while we’re building it (to prevent people querying it while it is still being built), and also when we’re querying it (since WinForms applications are STA threaded there shouldn’t ever be more than 1 UI thread accessing the dictionary at a time anyway). In order to prevent the add-in locking up SSMS if the dictionary is still being built we wait for 1 second to see if we can acquire a lock on the dictionary. If we can’t we just return nothing from the search results. You’re welcome to look at the internals of the DatabaseObjectSearcher and the BuildObjectDictionary method to try and make this faster if you wish.

Please post any suggestions, bugs, anything I've overlooked, registration hacks, other tutorials I didn't find etc. as comments here 

posted on Monday, November 26, 2007 8:17 AM

Feedback

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/27/2007 9:28 AM Joeseph

Couple adds-ins here. No downloadable code although you could probably ask and compare notes. 
http://sqlblogcasts.com/blogs/seanprice/archive/2007/07/15/sql-management-studio-snapshot-add-in.aspx

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/28/2007 7:54 AM Mladen

Hi! 
I'm the author of Ssms Tools Pack 
and i can tell you that ssms express does allow add-ins with a few workarounds. 
send me a mail via my blog or the ssms tools pack page and we can talk if you're interested... 

about the search window injection. i've played with this a lot... with no luck since the tools windows (search is one) are pure com objects and they don't have any methods to hook into. 

i've also tried to remove singletons from my add-in but i've seen that they work very well are not at all evil in this case :)

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/29/2007 2:51 PM Alek Davis

Great article, and great add-in. Thank you!

# links for 2007-11-30 11/30/2007 3:20 AM guidmaster´s .NET blog

Free Silverlight and WPF Training | Joshua | MIX Online (tags: Silverlight wpf ) The Black Art of Writing

# Links of the week #13 (week 48/2007) 12/2/2007 2:35 PM Bite my bytes

Links of the week #13 (week 48/2007)

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 12/3/2007 4:26 AM Darren Gosbell

Hey great post Joeseph. I'm going to see if I can make some time to have a look and see if I can't build a couple of small features for SSAS.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 12/17/2007 4:28 PM Chinkit Patel

Well Done Mate! Love your

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 1/8/2008 2:39 AM Cedric

Installed the AddIn ,but it does not find some object that I search for .We have Stored procedures that start with BPC_01 ,BPC_02 etc and when I use "BPC_" as a search argument it does not find all the stored procedures

# Recent Queries 1/15/2008 1:34 AM Jon Sayce

Have you ever needed to write some SQL that's almost the same as a previous query, but the previous query

# Building a SQL Server Management Studio Add-in 1/15/2008 1:53 PM Jon Sayce

Various people have built SSMS add-ins and some have even given tips on writing one, but very few of

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 1/20/2008 7:38 PM Jintan

Hi,I download the setup file and install it on my computer(My OS language is Chinese),and opening the SSMS,the SSMS alert "Add-in 'DataBaseObjectSearch.connect' Can not load" 
Error information:Index invalid" 

Can you help me?

# Free SQL Server tools that might make your life a little easier 2/6/2008 2:28 PM Zunanji viri

Update: New Stuff from the latest update will be in RED . This list will grow as I find new tools. So

# Visual Studio Extensibility - hard 2/20/2008 12:09 PM JCooney.NET

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 4/26/2008 6:28 PM seks

thanx man

# [PL][util] Piszemy narzędzia w T-SQL cz. 2 - sp_findobjects 5/19/2008 1:23 AM SQLGEEK

Slowem wstepu Notka zatytulowana " Piszemy narzedzia w T-SQL cz. 1 - sp_getcolumns " rozpoczalem ponad

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 6/17/2008 8:14 AM new myspace layouts

Great article, thank you very much.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 6/18/2008 8:23 AM Oscar Aagren

Thanks, this was a great post. Ive used the source code and learnt a lot, added two comboboxes for filtering database and/or schema too. Msg me if you want a peek at it...

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 7/10/2008 5:02 AM Michael

Very Useful...Thank you very much. 
How do I add a combobox populated with database object to filter for specific database... 

Thanks again

# [EN] Five things I would change in SSMS 7/19/2008 9:13 AM SQLGEEK

SQL Server Management Studio (SSMS) is the most often used environment in my everyday work. I got used

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 7/20/2008 6:57 AM PP

If you wish to register such an AddIn in the Express Version of SQL Server Management Studio, you basically have to insert the registry values you now have in Shell/Addins (what is for standard version of management studio) also 
into ShellSEM/Addins/ (what is the path for the express version) 

The registry path is: 

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/90/Tools/ShellSEM/Addins/

# Registry keys for SSMS 2008 7/20/2008 10:50 AM Bob

apparently the registry path for the 2008 version is: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/100/Tools/Shell/AddIns/

# Free SQL Server tools that might make your life a little easier 7/25/2008 12:58 AM ∈鱼杆

FreeSQLServertoolsthatmightmakeyourlifealittleeasierUpdate:NewStufffromthelatestu...

# Free SQL Server tools that might make your life a little easier 7/25/2008 1:09 AM ∈鱼杆

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 7/27/2008 1:36 AM RITANSHI GUPTA

SQL SERVER MANAGEMENT STUDIO 2005

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 8/13/2008 2:23 PM Michael

So I was just sitting with a coworker figuring out how to do this as an addin and I found your page...which does exactly what we were trying to implement. Nice. 

Good work!

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 8/14/2008 12:33 PM chadra

Help please.! 
After install, add-in shows up in Tools, When ran search windows appears, but can not type anything. After that can not focus on search text box.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 8/21/2008 12:57 AM Working in SQL Server Management Studio Express Ed


Hello, 

By using these registry keys I am able to load the add-in in SQL Server Management Studio Express Edition. 


Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/90/Tools/ShellSEM/AddIns/DatabaseObjectSearcher.Connect] 
"SatelliteDllName"="DatabaseObjectSearcherUI.dll" 
"SatelliteDllPath"="C://Program Files//JCooney.NET//DB Object Quick Find//" 
"LoadBehavior"=dword:00000001 
"CommandPreload"=dword:00000001 
"FriendlyName"="Quick Find DB Object" 
"Description"="This is a description"SqlWorkbench.Interfaces

# Working in SQL Server Management Studio Express Ed 8/21/2008 12:59 AM Charles

Hello, 

It appears that SQL Server Management Studio Express Edition uses Microsoft.SqlServer.Express.SqlWorkbench.Interfaces.dll and not SqlWorkbench.Interfaces 

I see this error when pressing Ctrl+F3 

System.IO.FileNotFoundException: Could not load file or assembly 'SqlWorkbench.Interfaces, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified. 
File name: 'SqlWorkbench.Interfaces, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' 
at DatabaseObjectSearcher.SearcherController.GetActiveWindowConnection() 
at DatabaseObjectSearcher.SearcherController.GetSearcher() 
at DatabaseObjectSearcherUI.SearchToolWindow.SearchToolWindow_GotFocus(Object sender, EventArgs e) 
at System.Windows.Forms.Control.OnGotFocus(EventArgs e) 
at System.Windows.Forms.TextBox.OnGotFocus(EventArgs e) 
at System.Windows.Forms.Control.WmSetFocus(Message& m) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at System.Windows.Forms.TextBoxBase.WndProc(Message& m) 
at System.Windows.Forms.TextBox.WndProc(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 9/4/2008 11:16 PM Charles Rex

Hello, 

I have the same problem as Chadra. 

When installing the add-in on Vista Ultimate, SQL Server 2005 Workgroup edition + SP2, 
the add-in shows up in Tools, when ran search windows appears, but can not *type* anything. 

The reason is that the search textbox can't get the focus when I click inside it ?? 

# Free SQL Server tools that might make your life a little -zt 9/13/2008 9:08 AM 挥辉

FreeSQLServertoolsthatmightmakeyourlifealittleeasier Update:NewStufffromthelatest...

# Transfered your QuickFind to SSMS 2008 10/15/2008 4:08 AM iucon

Hi, 

I just implemented a SSMS 2008 version of your useful Addin "QuickFind" and added some functionality. 
The project is hosted on CodePlex http://www.codeplex.com/SSMSAddins 

I refered to your name and blog entry in both, the AboutDialog and the website. 
If I should change something regarding your work or you disallow me to publish the project, please let me know! 

Best regards, 
Stefan

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/4/2008 12:11 PM order casodex

So I was just sitting with a coworker figuring out how to do this as an addin and I found your page...which does exactly what we were trying to implement. Nice. 

Good work!

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/22/2008 1:43 PM order zyban

Very good job. Add your blog to bookmarks.

# Another great link 11/23/2008 10:13 AM Charles Rex

Please check this very useful link: 

http://www.karpach.com/ViewArticle.aspx?ArticleFileName=SQL-Server-Managment-Studio-Object-Explorer-Search-Add-In.htm 

Many thanks for your hard work!

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 11/28/2008 2:19 AM viagra

good info! thanks

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 12/26/2008 2:03 PM geniric viagra

Thank you for this post, very interesting post! It’s very important problem.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 12/26/2008 2:07 PM achat sildenafil 100mg

Great post, i`ve new vers SQL.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 12/26/2008 2:24 PM cialas

THANKS! Searched the world over for a answer.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 1/15/2009 1:25 PM buy lasix

Very good job. Add your blog to bookmarks.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 1/22/2009 5:15 AM Generic Viagra

That’s great, I never thought about that like that before.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 2/12/2009 12:00 PM buy cheapest cialis

Excellent article, added to bookmarks.

# SQL Server Management Studio アドイン 3/1/2009 5:09 AM Not Only Result Ambition

????????2??(4???3??)?nora????????????????30?····???????????????????????????????????????????(? ?????????

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 3/19/2009 7:55 AM generic cialis

I will take a look at the internals of the DatabaseObjectSearcher and the BuildObjectDictionary method to try and make this faster.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 3/28/2009 10:25 AM leonardo

When a version for SQL2008? too busy, maybe...

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 5/19/2009 6:53 AM 18 film izle

Good Topic! Thanks a lot. It is very helpful.

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 5/22/2009 6:17 AM Andy

Does anyone know of a SVN Addin for SSMS 2005?

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 5/22/2009 11:44 PM Generic Accutane

Isotretinoin is used to treat severe, disfiguring nodular acne

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 6/1/2009 2:16 AM Phentermine 37.5

The science of bioenergetics including biochemical and physiological energy production and utilization systems, that is frequently abcweightloss.net evidence of diabetes, and ketone bodies, acetone particles occurring in body fluids and tissues involved in acidosis, also known as ketosis, somewhat common in severe diabetes. 

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 6/24/2009 10:36 AM Steam

It's great! Thanks admin

# re: The Black Art of Writing a SQL Server Management Studio 2005 Add-In 6/25/2009 8:02 PM Bella Beladone

Fantastic thank you. Find the files you are looking for at f-torrents.com the most comprehensive source for free-to-try files downloads on the Web

# SQL Server:如何编写SSMS插件 6/30/2009 3:13 AM 陈希章

???????,????????,???? SSMS Add-in developmentThe following sites detail how to create SSMS add-ins:E...

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server Management Studio 2008 是由 Microsoft 公司开发的一款用于管理 SQL Server 数据库的工具。如果你想下载 SQL Server Management Studio 2008 版本,可以按照以下步骤进行操作: 1. 打开你的网络浏览器,进入 Microsoft 官方网站。 2. 在网站的搜索框中输入 "SQL Server 2008 Management Studio",然后点击搜索按钮。 3. 在搜索结果中,找到适用于你的操作系统的版本。请注意,SQL Server Management Studio 2008 仅适用于 Windows 系统。 4. 点击下载按钮或链接,开始下载 SQL Server Management Studio 2008 安装程序。 5. 下载完成后,双击安装程序打开安装向导。 6. 在安装向导中,按照指示完成安装过程。可以接受默认设置,或根据个人需求进行自定义设置。 7. 完成安装后,可以在开始菜单中找到 SQL Server Management Studio 2008 的快捷方式,点击打开。 8. 在打开的 SQL Server Management Studio 2008 窗口中,可以输入数据库服务器的连接信息并登录。 9. 登录成功后,你就可以使用 SQL Server Management Studio 2008 进行数据库管理、查询、维护等操作了。 需要注意的是,SQL Server Management Studio 2008 是一个庞大的软件,安装包可能较大,下载需要一定的时间和网络流量,建议保持网络通畅和稳定的情况下进行下载操作。 ### 回答2: 要下载SQL Server Management Studio 2008,您可以按照以下步骤操作: 1. 打开您的网络浏览器,然后转到Microsoft官方网站。 2. 在搜索栏中键入“SQL Server Management Studio 2008”,然后按Enter键。 3. 在搜索结果中选择您所需的版本。 4. 点击下载按钮,以开始下载。 5. 下载完成后,打开下载的安装文件。 6. 按照安装向导的指示,选择您想要安装的组件和选项。 7. 确认安装目录,并在需要时进行自定义更改。 8. 点击“继续”按钮,以开始安装过程。 9. 等待安装完成,并确保勾选“启动SQL Server Management Studio”选项。 10. 单击“完成”按钮,以完成安装。 安装完成后,您可以打开SQL Server Management Studio 2008,并使用它来管理和操作SQL Server数据库。 请注意,SQL Server Management Studio 2008已经过时,并且微软不再提供官方支持。建议您升级到最新版本的SQL Server Management Studio,以获得更好的性能和安全性。 ### 回答3: 要下载SQL Server Management Studio 2008,您可以按照以下步骤进行操作: 1. 首先,您可以在微软官网上找到SQL Server 2008的下载页面。您可以使用任何现代的网络浏览器,例如Google Chrome或Microsoft Edge访问官方网站。 2. 在微软官网上,您可以找到SQL Server 2008的下载链接。您可以使用搜索框或导航栏来查找适当的下载页面。 3. 确保您选择的下载链接是SQL Server 2008的Standard或Enterprise版本,这两个版本都包含SQL Server Management Studio 2008的安装程序。 4. 单击下载链接后,您将被引导到一个新页面,其中包含SQL Server 2008安装程序的下载选项。根据您的系统架构选择适当的版本(32位或64位)。 5. 点击下载选项后,您将被要求选择一个安装位置。您可以选择将安装程序保存在您选择的位置,或者在弹出的对话框中选择“保存文件”。 6. 下载完成后,您可以双击安装程序文件来启动安装过程。根据系统提示完成安装过程。 请注意,SQL Server 2008已经过时,并且不再得到微软的支持。建议您升级到最新版本的SQL Server,并使用相应的SQL Server Management StudioSQL Server 2019是当前的最新版本,并提供了更多的功能和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值