<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7454131984813719395</atom:id><lastBuildDate>Fri, 01 Nov 2024 10:49:32 +0000</lastBuildDate><category>SQL Encryption Assistant</category><category>SQL Server 2005</category><category>Service Broker Assistant</category><category>SQL Encryption</category><category>SQL.CLR</category><category>Devenius</category><category>SQL Service Broker</category><category>SnipStorm</category><category>Certificates</category><category>SQL CLR Stored Procedures</category><category>SQL Server 2008</category><category>mISV</category><title>Devenius Software Development</title><description></description><link>http://devenius.blogspot.com/</link><managingEditor>noreply@blogger.com (Tim)</managingEditor><generator>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-4896651825352794934</guid><pubDate>Fri, 25 Sep 2009 19:12:00 +0000</pubDate><atom:updated>2009-09-25T12:13:52.141-07:00</atom:updated><title>Collation in SQL Server</title><description>“SQL Server is not case sensitive” ….. I am sure DBA’s have heard this phrase uttered on many an occasion.  The truth is ….that depends!  &lt;br /&gt;&lt;br /&gt;The case sensitivity among other things is determined in SQL Server by the collation setting.   The collation assigned in SQL Server determines the sorting rules, case, and accent sensitivity of the data residing inside a SQL Server database. This property is defined at the server, database, column, and expression level.  Each level defaults to the setting of the parent if not explicitly defined.   &lt;br /&gt;&lt;br /&gt;Specifying the collation setting in SQL Server determines which codepage is utilized to represent non-unicode character data.  A codepage is a set of characters that represent different languages and locales.   When installing SQL Server, the machine locale setting determines the default collation setting used by the SQL Server being installed.   If the locale setting for the machine is set to “English (United States)” the default collation setting is SQL_Latin1_General_CP1_CI_AS which is case insensitive.   Not changing this during install results in the server collation setting being case insensitive.&lt;br /&gt;&lt;br /&gt;Collation names are comprised using the following naming standard.&lt;br /&gt;SQL_&lt;em&gt;SortRule&lt;/em&gt;_&lt;em&gt;pref&lt;/em&gt;_&lt;em&gt;CodePage&lt;/em&gt;_ {&lt;em&gt;CaseSensitivity&lt;/em&gt;_&lt;em&gt;AccentSensitivity&lt;/em&gt; | BIN}&lt;br /&gt;&lt;br /&gt;&lt;em&gt;SortRule&lt;/em&gt; - identifies the language to be used for sorting&lt;br /&gt;&lt;br /&gt;&lt;em&gt;CodePage&lt;/em&gt; - identifies the code page&lt;br /&gt;&lt;br /&gt;&lt;em&gt;CaseSensitivity&lt;/em&gt; - either CI or CS for Case Insensitive or Case Sensitive&lt;br /&gt;&lt;br /&gt;&lt;em&gt;AccesntSensitivity&lt;/em&gt; - either AI or AS for Accent Insensitive or Accent Sensitive&lt;br /&gt;&lt;br /&gt;BIN – designates that binary sort order is to be used.&lt;br /&gt;&lt;br /&gt;A list of available collations for SQL Server 2008 can be found &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms180175.aspx&quot;&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;Collation is not just defined for the SQL Server instance however. One can control collations to a finer degree.  The T-SQL command COLLATE will apply the selected collation to a database during the execution of CREATE  DATABASE command.  The following command will result in a new database with using the “English (United States)” code page with case sensitivity.&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;CREATE DATABASE TestDB_2 COLLATE SQL_Latin1_General_Cp1_CS_AS&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;COLLATE can also be applied in the column definition of CREATE and ALTER Table. The following example will create a table “MOVIES” with the titles being case insensitive and accent sensitive.&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;CREATE TABLE MOVIES&lt;br /&gt;(Mov_ID INT,&lt;br /&gt; MOV_TITLE  VARCHAR(1024)  COLLATE SQL_Latin1_General_Cp1_CI_AS NOT NULL,&lt;br /&gt; MOV_RELEASE_DATE DATE&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Since the TestDB_2 database was created using a case sensitive collation the object names in the database then also become case sensitive. So after creating the table “MOVIES” the following statement will fail.&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt; DROP TABLE dbo.movies;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And Lastly, COLLATE can also be applied to a string expression. This will result in a cast of the result into the specified collation.&lt;br /&gt;&lt;br /&gt;So, “SQL Server is not case sensitive”…. Just depends.</description><link>http://devenius.blogspot.com/2009/09/collation-in-sql-server.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-944096746183158274</guid><pubDate>Fri, 18 Sep 2009 15:43:00 +0000</pubDate><atom:updated>2009-09-18T08:43:57.372-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL.CLR</category><title>SQL.CLR Profession Edition Released!</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8RuxZUx1ghNER5Ee1ds9dpVyNk5VQ4HNlQh1CWWoiyFFk1Y7lmY8gi847yO23-LUVIj_7MAIEkNdDLHcWt6W131Y8kthsscjlQbxbZZiZBfJRtjRjLUC1QNJ45yPCEW7waw7ebRGD6bES/s1600-h/SPA_Med_New.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 128px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8RuxZUx1ghNER5Ee1ds9dpVyNk5VQ4HNlQh1CWWoiyFFk1Y7lmY8gi847yO23-LUVIj_7MAIEkNdDLHcWt6W131Y8kthsscjlQbxbZZiZBfJRtjRjLUC1QNJ45yPCEW7waw7ebRGD6bES/s400/SPA_Med_New.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5382511701543972658&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SQL.CLR Professional Edition and SQL.CLR Professional 2008 Edition have now been released.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Version 1.0.3.62&lt;br /&gt;&lt;br /&gt;Added features:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s1600-h/AppSpaSmall.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 16px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s400/AppSpaSmall.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5382511947017535058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Supports multiple object generation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s1600-h/AppSpaSmall.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 16px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s400/AppSpaSmall.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5382511947017535058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Template generator&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;font-weight: bold;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s1600-h/AppSpaSmall.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 16px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBItxKrBK_RUUalBKwjwW56QPRrpVRyw_FvH_uyBvD1D5lxdxSofn-hx-jUp4i9qay-QLsmWAudDzuQ7J8HK_yUGr6ZyfU4k_C3pylOeqvUxUiTUFNYdkTYX9o1KJJ-8sBfSLwvqIZpl1s/s400/AppSpaSmall.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5382511947017535058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Included Deployment Script&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.devenius.com/sql_server_tools/sql_clr/Features.aspx&quot;&gt;Features&lt;/a&gt;</description><link>http://devenius.blogspot.com/2009/09/sqlclr-profession-edition-released_18.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8RuxZUx1ghNER5Ee1ds9dpVyNk5VQ4HNlQh1CWWoiyFFk1Y7lmY8gi847yO23-LUVIj_7MAIEkNdDLHcWt6W131Y8kthsscjlQbxbZZiZBfJRtjRjLUC1QNJ45yPCEW7waw7ebRGD6bES/s72-c/SPA_Med_New.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-8726098151435764792</guid><pubDate>Tue, 15 Sep 2009 23:17:00 +0000</pubDate><atom:updated>2009-09-15T16:36:58.052-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SnipStorm</category><category domain="http://www.blogger.com/atom/ns#">SQL Server 2005</category><category domain="http://www.blogger.com/atom/ns#">SQL Server 2008</category><title>SnipStorm Explorer Released!</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxqH1L1ctexplev7LfkIja9NqbwCcWux8eNTMaDmaKKPx1M-Tb4zeZj-NmsvOplaO3wwyYFnzX9k6yGgHGigcSnBafArW1b32sxxdKqoN8RAhB7yB5FGc8AElSgERG4RVxWo0UxdoMMf-S/s1600-h/SSE_Med_New.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 128px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxqH1L1ctexplev7LfkIja9NqbwCcWux8eNTMaDmaKKPx1M-Tb4zeZj-NmsvOplaO3wwyYFnzX9k6yGgHGigcSnBafArW1b32sxxdKqoN8RAhB7yB5FGc8AElSgERG4RVxWo0UxdoMMf-S/s400/SSE_Med_New.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5381838026210792466&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SQL Server T-SQL Script Addin&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-weight: bold;&quot;&gt;All your scripts a click away...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Many database developers have T-SQL scripts scattered across directories and folders. Finding that one script that you need can be frustrating and time consuming. Enter SnipStorm Explorer, a Windows explorer for T-SQL scripts, or snippets. This tool only displays snippets that are stored on your hard drive for easy access and quick viewing.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www.devenius.com/Images/Logos/AppSseMed.png&quot; alt=&quot;SSMS Addin&quot; /&gt; Online storage and access with &lt;a href=&quot;http://www.snipstorm.com/&quot;&gt;SnipStorm.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;img src=&quot;http://www.devenius.com/Images/Logos/AppSseMed.png&quot; alt=&quot;SSMS Addin&quot; /&gt; Available as Windows desktop app and SSMS addin&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRF1WfV_itYNysIoHevZAhINDjK8q2gQH8O7OH0Mm1a2CHVW2ZmeAKcHR8pikPTtWMp1z9if2fDh-RVG0cVBduhtOTMHTB7cCgmD9Ib4VfSFzO2tw97IwP4XJHt5dzFzP4nfRmPxtruuh5/s1600-h/SSEProductSmall.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 300px; height: 242px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRF1WfV_itYNysIoHevZAhINDjK8q2gQH8O7OH0Mm1a2CHVW2ZmeAKcHR8pikPTtWMp1z9if2fDh-RVG0cVBduhtOTMHTB7cCgmD9Ib4VfSFzO2tw97IwP4XJHt5dzFzP4nfRmPxtruuh5/s400/SSEProductSmall.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5381838717532041762&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From now to October 1 ,2009...SnipStorm Explorer is 50% off!!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just enter the discount code: &lt;span style=&quot;font-weight: bold;&quot;&gt;SnipStormRelease&lt;/span&gt; at checkout.</description><link>http://devenius.blogspot.com/2009/09/snipstorm-explorer-released.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxqH1L1ctexplev7LfkIja9NqbwCcWux8eNTMaDmaKKPx1M-Tb4zeZj-NmsvOplaO3wwyYFnzX9k6yGgHGigcSnBafArW1b32sxxdKqoN8RAhB7yB5FGc8AElSgERG4RVxWo0UxdoMMf-S/s72-c/SSE_Med_New.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-6981300373506233839</guid><pubDate>Sun, 23 Aug 2009 18:46:00 +0000</pubDate><atom:updated>2009-08-23T11:47:02.419-07:00</atom:updated><title>Change Data Capture - Part 2</title><description>As I mention in my previous post on Change Data Capture in SQL Server 2008, Microsoft provides table valued functions (TVF&#39;s) to access changed data.  The main TVFs used to query the change data are:&lt;br /&gt;&lt;br /&gt;cdc.fn_cdc_get_all_changes_&lt;em&gt;capture_instance&lt;br /&gt;&lt;/em&gt;and&lt;br /&gt;cdc.fn_cdc_get_net_changes_&lt;em&gt;capture_instance&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Each of these TVF&#39;s require two LSN&#39;s or log sequence numbers to identify the beginning and ending of the range of changes to be queried. Two functions are provided to aid in determining the min and max LSN available. They are:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb510621.aspx&quot;&gt;sys.fn_cdc_get_min_lsn&lt;/a&gt; and &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb500304.aspx&quot;&gt;sys.fn_cdc_get_max_lsn&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Get All Changes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first TVF, cdc.fn_cdc_get_all_changes_&lt;em&gt;capture_instance&lt;br /&gt;&lt;/em&gt;,will return one row per changed row on the source table. This means that if more than one column is modified in a transaction then one row is returned in the result set for the given data modification.&lt;br /&gt;&lt;br /&gt;The TVF accepts the following paramters when utilized.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Min LSN&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Max LSN&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Row Filter option&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The min LSN is obtained using the sys.fn_cdc_get_min_lsn function. Using Employees table from the previous post as an example, the min lsn can be obtained as follows&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;SELECT sys.fn_cdc_get_min_lsn (&#39;dbo_Employees&#39;)AS min_lsn;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The max LSN is obtained using the sys.fn_cdc_get_max_lsn function. This function does not require any inputs and returns the max lsn for the captured data of the source table. To get the max LSN from the Employees table:&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;SELECT sys.fn_cdc_get_max_lsn()AS max_lsn;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The row filter option has two settings, All and All Update Old. The All option will return all changes made to the source table in one row. The All Update Old option will return one row for an update showing the previous value and one row showing the changed value.&lt;br /&gt;&lt;br /&gt;Putting it all together to get the changes:&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;DECLARE @minLSN BINARY(10),@maxLSN BINARY(10)&lt;br /&gt;SELECT @minLSN=sys.fn_cdc_get_min_lsn (&#39;dbo_Employees&#39;);&lt;br /&gt;SELECT @maxLSN=sys.fn_cdc_get_max_lsn();&lt;br /&gt;select * from cdc.fn_cdc_get_all_changes_dbo_Employees(@minLSN,@maxLSN,N&#39;All&#39;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Get Net Changes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second TVF available to work with captured change data is &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb510621.aspx&quot;&gt;sys.fn_cdc_get_min_lsn&lt;/a&gt;.  This TVF returns a row that specifies the whole change to a source row if more than one transaction has made modifications to that data. To use this feature the @supports_net_changes parameter must be set to 1 when enabling CDC on a given table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The input parameters are the same as cdc.fn_cdc_get_all_changes_&lt;em&gt;capture_instance&lt;br /&gt;&lt;/em&gt; however the row filter option is slightly different. The options available are All, All With Mask, and All With Merge. All will return all net changes. All With Mask will return the final row plus the operation needed to apply the row. The All With Merge will return the final row with the resturn column _$oprtation being either a 1 ( indicating a delete ) or a 5 ( indicating either an insert or update is needed to apply the change )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is an example utilizing the net changes.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;DECLARE @minLSN BINARY(10),@maxLSN BINARY(10)&lt;br /&gt;SELECT @minLSN=sys.fn_cdc_get_min_lsn (&#39;dbo_Employees&#39;);&lt;br /&gt;SELECT @maxLSN=sys.fn_cdc_get_max_lsn();&lt;br /&gt;select * from cdc.fn_cdc_get_net_changes_dbo_Employees(@minLSN,@maxLSN,N&#39;all&#39;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;One last item to mention is that Microsoft provides a function that correlate time to LSN&#39;s. This is useful if you have a specific time period in which you would like to capture changes made to data. The function is &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb500137.aspx&quot;&gt;sys.fn_cdc_map_time_to_lsn&lt;/a&gt; and can be used to determine lsn boundries based on time to be used in acquiring the change data.</description><link>http://devenius.blogspot.com/2009/08/change-data-capture-part-2.html</link><author>noreply@blogger.com (Chris)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-1682827863758849826</guid><pubDate>Sun, 16 Aug 2009 05:31:00 +0000</pubDate><atom:updated>2009-08-15T22:31:53.020-07:00</atom:updated><title>Change Data Capture in SQL Server 2008</title><description>Some applications require the ability to understand the full history of how data has been modified over time. A new feature included in SQL Server 2008 is Change Data Capture. Change Data Capture (CDC) allows for the ability to query data that has been modified through INSERT, UPDATE, or DELETE statements on a database table.&lt;br /&gt; &lt;br /&gt;The SQL Server 2008 database engine provides the necessary framework to implement Change Data Capture. It is currently available in SQL Server 2008 Enterprise, Developer and Evaluation editions.  The CDC process is accomplished through the use of the SQL Server transaction logs.  As data modifications are recorded in the database transaction log, the CDC process reads the log files and captures the changes for those tables that have been identified to participate in CDC. It then writes those modifications to the Change Capture Data tables.  Each table participating in CDC has a corresponding capture table that follows the naming standard &lt;schemaname_tablename_ct&gt; and is owned by the database user cdc to hold the modified data.  SQL Server allows for the placement of the table containing the modified data to be placed on a separate filegroup. This is a recommended configuration however the default location for the table will be the default filegroup for the database.&lt;br /&gt;&lt;br /&gt;Once a database has been enabled for CDC, two SQL Agent jobs are created to manage the capture process. One job is for the purpose of capturing data on those tables that have been identified for CDC. The other job is created for the purpose of cleaning up the collected change data.   Two procedures are provided to view and modify configuration parameters of these jobs. They are named sys.sp_cdc_change_job and sys.sp_cdc_help_jobs. Changes made through these procedures do not go into effect until the job is stopped and restarted.&lt;br /&gt;&lt;br /&gt;The following is a simple demo that walks through enabling CDC and querying changes made.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Set Up&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Create a test table to execute INSERT, UPDATE, and DELETE.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;CREATE TABLE [dbo].[EMPLOYEES](&lt;br /&gt;    [EMP_ID] [int] IDENTITY(1,1) NOT NULL,&lt;br /&gt;    [EMP_NAME] [varchar](100) NOT NULL,&lt;br /&gt;    [EMP_NUMBER] [int] NOT NULL,&lt;br /&gt;    [EMP_TITLE] [varchar](50) NOT NULL,&lt;br /&gt;    [EMP_HIRE_DATE] [date] NOT NULL,&lt;br /&gt;    [EMP_TERM_DATE] [date] NULL,&lt;br /&gt; CONSTRAINT [PK_EMPLOYEES] PRIMARY KEY CLUSTERED&lt;br /&gt;(&lt;br /&gt;    [EMP_ID] ASC&lt;br /&gt;)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY])&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Create database role for the management of the cdc tables.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;CREATE ROLE [ChangeData_Admin] AUTHORIZATION [cdc] &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To utilize CDC, it must be enabled for the database. This is accomplished using the following stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;EXECUTE sys.sp_cdc_enable_db;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Once CDC has been enabled for the database, the tables you wish to participate in CDC can then be identified through sys.sp_cdc_enable_table.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;EXECUTE sys.sp_cdc_enable_table&lt;br /&gt;    @source_schema = N&#39;dbo&#39;&lt;br /&gt;  , @source_name = N&#39;Employees&#39;&lt;br /&gt;  , @role_name = N&#39;ChangeData_Admin&#39;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The cdc agent jobs are created as a result of this procedure&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;Results&lt;br /&gt;------------&lt;br /&gt;Job &#39;cdc.TestDB_1_capture&#39; started successfully.&lt;br /&gt;Job &#39;cdc.TestDB_1_cleanup&#39; started successfully.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now we are ready to insert data into our table.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;INSERT INTO [Test_db1].[dbo].[EMPLOYEES]&lt;br /&gt;           ([EMP_NAME]&lt;br /&gt;           ,[EMP_NUMBER]&lt;br /&gt;           ,[EMP_HIRE_DATE]&lt;br /&gt;           ,[EMP_TERM_DATE]&lt;br /&gt;           ,[EMP_TITLE])&lt;br /&gt;     VALUES&lt;br /&gt;           (&#39;Steve Stark&#39;&lt;br /&gt;           ,1001&lt;br /&gt;           ,&#39;05/15/2008&#39;&lt;br /&gt;           ,null&lt;br /&gt;           ,&#39;Associate Developer&#39;)&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;INSERT INTO [Test_db1].[dbo].[EMPLOYEES]&lt;br /&gt;           ([EMP_NAME]&lt;br /&gt;           ,[EMP_NUMBER]&lt;br /&gt;           ,[EMP_HIRE_DATE]&lt;br /&gt;           ,[EMP_TERM_DATE]&lt;br /&gt;           ,[EMP_TITLE])&lt;br /&gt;     VALUES&lt;br /&gt;           (&#39;Mary Doe&#39;&lt;br /&gt;           ,1002&lt;br /&gt;           ,&#39;10/24/2003&#39;&lt;br /&gt;           ,null&lt;br /&gt;           ,&#39;Database Administrator&#39;)&lt;br /&gt;GO&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To see the changes we can query the cdc.dbo_employees_CT table. Microsoft does provide table valued functions to work with captured change data. For the sake of this post, I will directly query the capture table to view the results. For more information on how to use the provided table value functions, go &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc645858.aspx&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt;SELECT * FROM cdc.dbo_employees_CT&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here you will see two rows for the previous insert statements.&lt;br /&gt;&lt;br /&gt;Now update some data:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: sql;&quot;&gt;&lt;br /&gt; UPDATE dbo.EMPLOYEES&lt;br /&gt; SET EMP_TITLE = &#39;Development Director&#39;&lt;br /&gt; WHERE EMP_ID = 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Again query cdc.dbo_employees_CT to observe the changes. Since we performed an update there will be two rows captured. The first is the old value and the second is the new value. Captured delete data will also only contain one row displaying the value prior to the deletion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Clean Up&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DROP TABLE dbo.EMPLOYEES;&lt;br /&gt;EXECUTE sys.sp_cdc_disable_db;</description><link>http://devenius.blogspot.com/2009/08/change-data-capture-in-sql-server-2008.html</link><author>noreply@blogger.com (Chris)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-3639843216061067923</guid><pubDate>Thu, 13 Aug 2009 20:17:00 +0000</pubDate><atom:updated>2009-08-13T13:18:49.056-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><title>UPDATE: SQL Encryption Assistant v.1.0.6.238</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9evanXwZu4CLd8dj7hVw7VZec56Fv6nlAh8Hz7xFWbe6Iu9Rk-p9G5J35QWmePM9z-P89Tg8CMS8NDgF3RDugqP4HnQeaVbctr26BL2uG2tTwaYXNbDSWmu6HwAoekrkxowWw5qARhKzC/s1600-h/SEA_Med_New.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9evanXwZu4CLd8dj7hVw7VZec56Fv6nlAh8Hz7xFWbe6Iu9Rk-p9G5J35QWmePM9z-P89Tg8CMS8NDgF3RDugqP4HnQeaVbctr26BL2uG2tTwaYXNbDSWmu6HwAoekrkxowWw5qARhKzC/s200/SEA_Med_New.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5369545295759842130&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Devenius has just released an update to &lt;strong&gt;SQL Encryption Assistant&lt;/strong&gt;. The latest version is now &lt;strong&gt;1.0.6.238&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;This update applies to the following editions:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Standard&lt;br /&gt;Standard 2008&lt;br /&gt;Professional&lt;br /&gt;Professional 2008&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Some of the new features include:&lt;br /&gt;&lt;br /&gt;- Expanded EKM functionality&lt;br /&gt;- &quot;Color-Coded&quot; Encryption Status&lt;br /&gt;- Extensible Key Management device support or asymmetric and symmetric keys&lt;br /&gt;&lt;br /&gt;To apply the update, please see the post &lt;a href=&quot;http://www.devenius.com/Forum.aspx?g=posts&amp;t=21&quot; target=&quot;new&quot;&gt;&quot;How do I get the latest version of SQL Encryption Assistant?&quot;&lt;/a&gt;.</description><link>http://devenius.blogspot.com/2009/08/update-sql-encryption-assistant-v106238.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9evanXwZu4CLd8dj7hVw7VZec56Fv6nlAh8Hz7xFWbe6Iu9Rk-p9G5J35QWmePM9z-P89Tg8CMS8NDgF3RDugqP4HnQeaVbctr26BL2uG2tTwaYXNbDSWmu6HwAoekrkxowWw5qARhKzC/s72-c/SEA_Med_New.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-4364441513113987624</guid><pubDate>Fri, 07 Aug 2009 01:47:00 +0000</pubDate><atom:updated>2009-08-06T18:51:42.319-07:00</atom:updated><title>The DBA vs. Service Broker Assistant Part II</title><description>So being the DBA portion of Devenius ( see &lt;a href=&quot;http://about.devenius.com&quot;&gt;About&lt;/a&gt; ) I figured I would try to test my developer partner&#39;s statistics from Part 1 using Server Broker Assistant in implementing the event notification logging example.  I did deviate slightly from the plan by creating the tables and stored procedure prior to beginning the time study. My test went as follows.&lt;br /&gt;&lt;br /&gt;1) Enable service broker for the test database.&lt;br /&gt;2) Create the queue for notification events.&lt;br /&gt;3) Create the service to manage the queue.&lt;br /&gt;4) Alter the queue to use the previously created stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I suppose I could have just as easily skipped step 4 and hooked in the stored procedure upon queue creation. However, I figured I would try to get close to the same process I am attempting to validate.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Test Case A - scripted&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Using Management Studio&#39;s Query window, I wrote and executed the T-SQL manually. I too had the syntax available to me and wasn&#39;t required to perform any lookups on MSDN or BOL. Here is a copy of the sytax:&lt;br /&gt;&lt;br /&gt;1. ALTER DATABASE TestDB_1 SET ENABLE_BROKER;&lt;br /&gt;&lt;br /&gt;2. CREATE QUEUE NotifyQueue;&lt;br /&gt;&lt;br /&gt;3. CREATE SERVICE NotifyService&lt;br /&gt;ON QUEUE NotifyQueue&lt;br /&gt;(&lt;br /&gt;[http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;4. ALTER QUEUE [dbo].[NotifyQueue]&lt;br /&gt;    WITH ACTIVATION (&lt;br /&gt;        STATUS = ON,&lt;br /&gt;        PROCEDURE_NAME = [dbo].[LogEventsProc] ,&lt;br /&gt;        MAX_QUEUE_READERS = 2,                &lt;br /&gt;        EXECUTE AS SELF                          &lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Test Case B - Service Broker Assistant&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In this scenario, I used the Service Broker Assistant to perform the same actions in Test Case A.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;And the results:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Test Case &lt;b&gt;A&lt;/b&gt; =  3 min. 54 sec.&lt;br /&gt;Test Case &lt;b&gt;B&lt;/b&gt; =  1 min. 46 sec.&lt;br /&gt;   &lt;br /&gt;Service Broker Assistant showed quite an improvement in time to execute over the traditional method of manual T-SQL.</description><link>http://devenius.blogspot.com/2009/08/dba-vs-service-broker-assistant-part-ii.html</link><author>noreply@blogger.com (Chris)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-2371979875812222660</guid><pubDate>Sun, 02 Aug 2009 23:51:00 +0000</pubDate><atom:updated>2009-08-02T23:10:51.902-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Service Broker</category><title>The DBA vs. Service Broker Assistant Part I</title><description>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Cn54_bZu0pbO031mz8cndQVwU7npzfb5gDeeulDBxlZaCclUqZEkg7ZoGhy4YxqLYcDmusX_4rCvGSlPCPwoeFcP84OmaXyuKkzSYxtOaHVO_lZyJ71hLyD5M0E7U36wiks8tx9amOn-/s1600-h/641px-Mad_scientist_transparent_background.svg.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 140px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Cn54_bZu0pbO031mz8cndQVwU7npzfb5gDeeulDBxlZaCclUqZEkg7ZoGhy4YxqLYcDmusX_4rCvGSlPCPwoeFcP84OmaXyuKkzSYxtOaHVO_lZyJ71hLyD5M0E7U36wiks8tx9amOn-/s200/641px-Mad_scientist_transparent_background.svg.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5365615790592263890&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;A while back I posted the MSDN example for event logging with SQL Service Broker using our latest product SQL Service Broker Assistant.  The example is a Service Broker implementation  for logging event notifications.  Then I got to thinking...how long would it have taken me to script the application in T-SQL? Good question.  I have no idea.&lt;/span&gt;&lt;/p&gt;  &lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;So, I decided to have a little competition. &lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The DBA vs. Service Broker Assistant&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A couple notes for the test. The example has several steps and for the sake of simplicity the dependent tables and stored procedure are deployed ahead of time.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;This test will be performed using the Standard edition of Service Broker Assistant.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;The professional edition is in the final stages of development and once it is released I will attempt the same test.&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;The professional edition will allow you to create event notifications for Service Broker, the final step in the example.&lt;br /&gt;&lt;br /&gt;Steps&lt;br /&gt;&lt;br /&gt;1. Enable the Service Broker on the instance.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;2. Create the service queue for logging.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;3. Create the logging service.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;4. Create logging tables, one in relational format the other to handle XML.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;p  class=&quot;MsoNormal&quot; style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;5. Create the stored procedure for executing upon activation.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;  &lt;span style=&quot;line-height: 115%;&quot;&gt;6. Alter the queue to add the stored procedure created in step 5.&lt;br /&gt;&lt;br /&gt;Ready...set...GO!!!&lt;br /&gt;&lt;br /&gt;The completely unscientific results:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;DBA 2 minutes 55 seconds&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SBA 1 minute 25 seconds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Over a 50% decrease in time!  &lt;/span&gt;Now that assumes I remembered all the syntax for each step, while possible, I don&#39;t know about you but most of the time I need to look things up.  Remember, I&#39;m a developer by trade not a DBA...so wait maybe it should be &lt;span style=&quot;font-weight: bold;&quot;&gt;Developer vs. Service Broker Assistant&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;I...need...a...DBA. Hmmm...to be continued.&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://devenius.blogspot.com/2009/08/dba-vs-service-broker-assistant-part-i.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Cn54_bZu0pbO031mz8cndQVwU7npzfb5gDeeulDBxlZaCclUqZEkg7ZoGhy4YxqLYcDmusX_4rCvGSlPCPwoeFcP84OmaXyuKkzSYxtOaHVO_lZyJ71hLyD5M0E7U36wiks8tx9amOn-/s72-c/641px-Mad_scientist_transparent_background.svg.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-709475190909491434</guid><pubDate>Tue, 21 Jul 2009 06:30:00 +0000</pubDate><atom:updated>2009-07-20T23:35:53.882-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SnipStorm</category><title>SnipStorm.com is Unleashed</title><description>We have just finished the finishing touches on a companion site for Devenius.com...&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbnL_ryOnMfewxq7BiBFWLVZXeXOj5DJEyWK39PZsCuSPrQcRID0HN2zN8s_iOD6EyVhWNJR1p-I5cCHOnR35kU8ipIVk6uRl3Vlilq2iZ0Ien4T8WdZO0TbROysYQKOnK6ESDpSKTTuVD/s1600-h/SnipStormLogo.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbnL_ryOnMfewxq7BiBFWLVZXeXOj5DJEyWK39PZsCuSPrQcRID0HN2zN8s_iOD6EyVhWNJR1p-I5cCHOnR35kU8ipIVk6uRl3Vlilq2iZ0Ien4T8WdZO0TbROysYQKOnK6ESDpSKTTuVD/s320/SnipStormLogo.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5360797912968328914&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;strong&gt;SnipStorm&lt;/strong&gt; is a community where you can find              &lt;strong&gt;the latest SQL stories&lt;/strong&gt; to learn about new             features, new ideas and meet new people.                   &lt;p&gt;             Share your opinions with others, ask questions, answer questions              and earn &lt;em&gt;Bolts&lt;/em&gt; from the community.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;We plan on extending the site to include more features aimed at DBAs and developers, so check back soon!&lt;br /&gt;&lt;/p&gt;</description><link>http://devenius.blogspot.com/2009/07/snipstormcom-is-unleashed.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbnL_ryOnMfewxq7BiBFWLVZXeXOj5DJEyWK39PZsCuSPrQcRID0HN2zN8s_iOD6EyVhWNJR1p-I5cCHOnR35kU8ipIVk6uRl3Vlilq2iZ0Ien4T8WdZO0TbROysYQKOnK6ESDpSKTTuVD/s72-c/SnipStormLogo.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-2958927952442095603</guid><pubDate>Sat, 27 Jun 2009 22:15:00 +0000</pubDate><atom:updated>2009-06-27T15:22:27.680-07:00</atom:updated><title>900 Bytes - Index Limit</title><description>SQL Server 2005 and 2008 place a limit on the maximum key size when creating a non-clustered index. The current limitation is 900 bytes. This means that the total size of the keyed columns included in the index definition cannot exceed 900 bytes. SQL Server will issue an error or a warning at the time of index creation depending on the columns specified.&lt;br /&gt;&lt;br /&gt;Fortunately there are some options available to overcome this limitation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;INCLUDE COLUMNS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first is to leverage the INCLUDE &lt;columns&gt; statement in CREATE INDEX. This feature enables us to remove some of the columns in the index key but still allows them to participate in the index. SQL Server places the data of these columns in the leaf level of the index. The benefits here are:&lt;br /&gt;1) The Index can fully cover a query if the SELECT statement contains columns that could otherwise not participate in the index key.&lt;br /&gt;2) The overall size of the index would be reduced.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HASHBYTES&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second option would be to add a column to the table of interest that would contain the hash value of the column to be searched on. This new column can then be indexed to provide better performance for searching. SQL Server provides a function, HASHBYTES, that returns the hash of the input provided. Algorithms supported by HASHBYTES include MD2, MD4, MD5, SHA, and SHA1. More detail on hash functions can be found here from &lt;a href=&quot;http://www.rsa.com/rsalabs/node.asp?id=2176&quot; target=&quot;new&quot;&gt;RSA Labs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Updating the new column with the hash value can be accomplished like this:&lt;br /&gt;&lt;br /&gt;UPDATE Table XYZ set ColA_Hash = HASHBYTE(&#39;SHA1&#39;,ColA)&lt;br /&gt;&lt;br /&gt;With an index in place, filtering in the WHERE clause using the HASHBYTE of the interested text should result in improved performance.&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;HASHBYTE(&#39;SHA1&#39;,&lt;em&gt;text&lt;/em&gt;) = ColA_Hash&lt;br /&gt;&lt;br /&gt;The use of HASHBYTES is an alternative but it should be noted that this will not provide a solution to searches filtered using the LIKE operator.&lt;br /&gt;&lt;/columns&gt;</description><link>http://devenius.blogspot.com/2009/06/sql-server-2005-and-2008-place-limit-on.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-312608056035672426</guid><pubDate>Fri, 19 Jun 2009 05:42:00 +0000</pubDate><atom:updated>2009-06-18T22:46:35.487-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Service Broker Assistant</category><title>HOW TO: Enable Service Broker Using SBA</title><description>The first step in creating Service Broker applications is to make sure the Service Broker instance for the database is enabled. This means that message delivery is activated and available.&lt;br /&gt;&lt;br /&gt;To enable the instance using &lt;span style=&quot;font-weight: bold;&quot;&gt;Service Broker Assistant&lt;/span&gt;, right-click &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Service Broker&lt;/span&gt;&#39; in the object explorer. Select &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Configure Service Broker..&lt;/span&gt;.&#39;. The configuration window will open and you will see &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Enable Service Broker&lt;/span&gt;&#39; as the first option under the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Service Broker Activation&lt;/span&gt;&#39; section.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVNgAXv_va9rKsTpm6SF3utJP36LQw3Ljn9TiXhbkxj_On7n_SGIGU297Bz5OSVutqKGhrr1D-LUDy-KR4cIGJUZv-scPlFPxV5rl1HxgZxGGzI2pkENdwJhJyL4ID60TpT6QgH2G3wEhN/s1600-h/Tutorial1Enable.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 308px; height: 180px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVNgAXv_va9rKsTpm6SF3utJP36LQw3Ljn9TiXhbkxj_On7n_SGIGU297Bz5OSVutqKGhrr1D-LUDy-KR4cIGJUZv-scPlFPxV5rl1HxgZxGGzI2pkENdwJhJyL4ID60TpT6QgH2G3wEhN/s320/Tutorial1Enable.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348910391518052050&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Enable&lt;/span&gt;&#39; is not selected, select it and click &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;OK&lt;/span&gt;&#39;. That&#39;s it. Service Broker is now enabled for that database.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Note: If the database has been restored from a file, there is the possibility that it will try to use the same Service Broker instance GUID. You will get an error message similar to the following:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic; color: rgb(255, 0, 0);&quot;&gt;The Service Broker in database [DB_NAME] cannot be enabled because there is already an enabled Service Broker with the same ID.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;If this happens, choose the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Reset Service Broker&lt;/span&gt;&#39; option to obtain a new GUID, then try again to enable the Service Broker.&lt;/span&gt;</description><link>http://devenius.blogspot.com/2009/06/how-to-enable-service-broker-using-sba.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVNgAXv_va9rKsTpm6SF3utJP36LQw3Ljn9TiXhbkxj_On7n_SGIGU297Bz5OSVutqKGhrr1D-LUDy-KR4cIGJUZv-scPlFPxV5rl1HxgZxGGzI2pkENdwJhJyL4ID60TpT6QgH2G3wEhN/s72-c/Tutorial1Enable.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-5223927561748216075</guid><pubDate>Tue, 16 Jun 2009 23:53:00 +0000</pubDate><atom:updated>2009-06-20T13:41:53.995-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Service Broker Assistant</category><category domain="http://www.blogger.com/atom/ns#">SQL Service Broker</category><title>Service Broker Assistant Event Logging Example</title><description>The &#39;Event Logging&#39; example provides a simple application that registers for, receives, and archives event notification messages.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Enable Service Broker&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Check that the Service Broker is enabled in the database by selecting &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Configure Service Broker...&lt;/span&gt;&#39;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgApzHGP6-55Qd03rXqdr1zWHvJzDpYScXyONHn7-j_CZRxsRDZISyLNkXxe4Xv8h5Z3PAg1IySiZBvdGAYO8DJKIYJ9zq_jeweIPik_v4jlFvwU74qbV_uZMTbs-A3pcEE0-AHgssgGz48/s1600-h/Tutorial1Enable.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 308px; height: 180px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgApzHGP6-55Qd03rXqdr1zWHvJzDpYScXyONHn7-j_CZRxsRDZISyLNkXxe4Xv8h5Z3PAg1IySiZBvdGAYO8DJKIYJ9zq_jeweIPik_v4jlFvwU74qbV_uZMTbs-A3pcEE0-AHgssgGz48/s320/Tutorial1Enable.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348080343995367218&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Queue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, create a &lt;span style=&quot;font-weight: bold;&quot;&gt;queue &lt;/span&gt;to store the notification messages.  Name it &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;NotifyQueue&lt;/span&gt;&#39; and set it&#39;s &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Status&lt;/span&gt;&#39; to available selecting the check box.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXF8h2Yx-2J3LAR7MWscde3-fGbf8hEZChSOZEbswImWc1UnNvACEG7rc0VaH6iOkLTfSNgZJONf84AdZfJJAL9Gg6OOIhCjDJDjApEEFuUdWwmq0Vq3zayeGkgrPIQWDehlDHidkmRvoO/s1600-h/Tutorial1Queue.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 261px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXF8h2Yx-2J3LAR7MWscde3-fGbf8hEZChSOZEbswImWc1UnNvACEG7rc0VaH6iOkLTfSNgZJONf84AdZfJJAL9Gg6OOIhCjDJDjApEEFuUdWwmq0Vq3zayeGkgrPIQWDehlDHidkmRvoO/s320/Tutorial1Queue.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078984503089138&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Service&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we can create a &lt;span style=&quot;font-weight: bold;&quot;&gt;service&lt;/span&gt;, which is the component that ties together a contract and a queue together for creating the application.  Name the service &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;NotifyService&lt;/span&gt;&#39; and select the queue created above.  Choose the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;PostEventNotification&lt;/span&gt;&#39; contract, a default contract that is in each database.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1DRfHGWqCSbhsAMsNcATOfxIxRpsCqolUKpzgD9_miSJna4KksvBz0MdYX9WwPatsymyZAoKJXuCHNW520ARfVWmvmXWlfRasMNLhiUXgSgPtGNt1EwRuiWiXpzVwiN6hJuB2ZgJ3-MW/s1600-h/Tutorial1Service.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 261px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1DRfHGWqCSbhsAMsNcATOfxIxRpsCqolUKpzgD9_miSJna4KksvBz0MdYX9WwPatsymyZAoKJXuCHNW520ARfVWmvmXWlfRasMNLhiUXgSgPtGNt1EwRuiWiXpzVwiN6hJuB2ZgJ3-MW/s320/Tutorial1Service.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348079128316817682&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Log Tables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For this example, we will use 2 tables.  The first holds event notification information in relational form:&lt;br /&gt;&lt;span style=&quot;font-size:78%;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE TABLE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo].[LoggedEvents] &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventNumber &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;INT &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;IDENTITY &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventType &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventTime DATETIME&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;LoginName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;UserName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ServerName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;DatabaseName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;SchemaName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ObjectName sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ObjectType sysname &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;TSQLCmdText &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) NULL&lt;br /&gt;    ) ;&lt;/span&gt;&lt;/code&gt;                               &lt;br /&gt;&lt;br /&gt;The second stores the event type and time along with the entire raw XML message:&lt;br /&gt;&lt;br /&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE TABLE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[LoggedEventsXML] &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventNumber &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;INT &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;IDENTITY &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventType &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventTime DATETIME&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;                &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventData XML&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) ;&lt;/span&gt;&lt;/code&gt;                               &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Activation Procedure&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The stored procedure that will be activated with each event notification is next.&lt;br /&gt;&lt;br /&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE PROCEDURE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo].[LogEventsProc]&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS&lt;br /&gt;SET &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;NOCOUNT &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ON&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;DECLARE &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;XML&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_type_name &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@dialog &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;UNIQUEIDENTIFIER &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- This procedure continues to process messages in the queue until the&lt;br /&gt;  -- queue is empty.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;WHILE &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;1 &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;BEGIN&lt;br /&gt;    BEGIN TRANSACTION &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- Receive the next available message&lt;br /&gt;          &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;WAITFOR &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;RECEIVE &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;TOP&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- just handle one message at a time&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_type_name&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;message_type_name&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;--the type of message received&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;message_body&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- the message contents&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@dialog &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;conversation_handle &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- identifier of the dialog this message was received on&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;FROM &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;NotifyQueue&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;TIMEOUT 2000 &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- if the queue is empty for two seconds, give up and go away&lt;br /&gt;      -- If RECEIVE did not return a message, roll back the transaction&lt;br /&gt;      -- and break out of the while loop, exiting the procedure.&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;IF &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@@ROWCOUNT &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;BEGIN&lt;br /&gt;      ROLLBACK TRANSACTION &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;BREAK &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;END &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- Check to see if the message is an end dialog message.&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;IF &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_type_name &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;BEGIN&lt;br /&gt;            PRINT &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;End Dialog received for dialog # &#39; &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;+ &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@dialog &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)) ;&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;END &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CONVERSATION &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@dialog &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;END &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ELSE&lt;br /&gt;    BEGIN&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- Extract the event information using XQuery.&lt;br /&gt;      -- Use XQuery to extract XML values to be inserted into the log table&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;INSERT INTO &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo].[LoggedEvents] &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventType&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventTime&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;LoginName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;UserName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ServerName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;DatabaseName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;SchemaName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ObjectName&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ObjectType&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;TSQLCmdText&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;VALUES&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/EventType/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/PostTime/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;DATETIME&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/LoginName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/UserName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/ServerName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/DatabaseName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/SchemaName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/ObjectName/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/ObjectType/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sysname&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/TSQLCommand/CommandText/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;))&lt;br /&gt;      ) ;&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;-- Insert the message body as XML into the loggedeventsXML table&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;INSERT INTO &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo].[LoggedEventsXML] &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventType&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventTime&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventData&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;VALUES&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/EventType/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;CAST&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.query&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;/EVENT_INSTANCE/PostTime/text()&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS NVARCHAR&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;datetime&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;),&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;@message_body&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) ;&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;END &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;COMMIT TRANSACTION &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;END &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;;&lt;/span&gt;&lt;/code&gt;                               &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alter Queue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we have to go back and alter the queue we created to use that procedure.  Select the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Activation&lt;/span&gt;&#39; check box.  The activation options are now enabled.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select the stored procedure, &lt;span style=&quot;font-weight: bold;&quot;&gt;LogEventsProc&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Max Queue Readers&lt;/span&gt;&#39; to 2&lt;/li&gt;&lt;li&gt;Select &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Execute as Self&lt;/span&gt;&#39;&lt;/li&gt;&lt;li&gt;Check &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Activate stored procedure&lt;/span&gt;&#39;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwZwFuBqBSnCrreEX3h1TVmdkWT-GoXQSTy6Ig0UXDlceXGeAjAS-I3Ii2PFB7zUD3uO_RAbHBG0EoWGTMcGJ3wK5tGHFme_viWWuHWxHHo6qbZttgAl_XZvzWWrLzx1us0TdI-Mb_xFwN/s1600-h/Tutorial1Alter.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 261px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwZwFuBqBSnCrreEX3h1TVmdkWT-GoXQSTy6Ig0UXDlceXGeAjAS-I3Ii2PFB7zUD3uO_RAbHBG0EoWGTMcGJ3wK5tGHFme_viWWuHWxHHo6qbZttgAl_XZvzWWrLzx1us0TdI-Mb_xFwN/s320/Tutorial1Alter.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078690513874786&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;OK&lt;/span&gt;&#39;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Event Notifications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With Service Broker, we can setup event notifications to alert our logging application when certain events take place.  We can choose from &lt;span style=&quot;font-weight: bold;&quot;&gt;server&lt;/span&gt;, &lt;span style=&quot;font-weight: bold;&quot;&gt;database &lt;/span&gt;or &lt;span style=&quot;font-weight: bold;&quot;&gt;queue &lt;/span&gt;level events.  In this example, we will choose the server level event &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;CREATE_DATABASE&lt;/span&gt;&#39; and the database level event &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;CREATE_TABLE&lt;/span&gt;&#39;.&lt;br /&gt;&lt;br /&gt;Right-click &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Service Broker&lt;/span&gt;&#39; in the SSMS object explorer and select &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create Event Notifications...&lt;/span&gt;&#39;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbhh7ZsNYxNRlaK25jkpn1KiMhAI_b3uY_NwQo9AJYAcdDcMivK_emMQtDILIsEkGdfGqE5TC0ZtBQ4ZiVYN0cFkQoLVcdYo5BvLJWM7VweVOnpnN-DtDpcKaex6REt5TXilHEHJWK6Pe/s1600-h/Tutorial1CreateEvent.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 55px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbhh7ZsNYxNRlaK25jkpn1KiMhAI_b3uY_NwQo9AJYAcdDcMivK_emMQtDILIsEkGdfGqE5TC0ZtBQ4ZiVYN0cFkQoLVcdYo5BvLJWM7VweVOnpnN-DtDpcKaex6REt5TXilHEHJWK6Pe/s320/Tutorial1CreateEvent.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348086133950195602&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Create the server level event &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;CreateDatabaseNotification&lt;/span&gt;&#39;.  Select the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Server&lt;/span&gt;&#39; scope.  Click the &#39;...&#39; next to &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;DDL event type&lt;/span&gt;&#39; and select &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;CREATE_DATABASE&lt;/span&gt;&#39; event.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbeA_kxXpHmV0sa6tN9CeNZSAj3VACHw7AWvZqVIA9H-0YRUr_FRciggJFdmnkBqUPr3P8eEhTEptlf-uqrl0A99RRHuFDtLAhy1giBar_PLzGgxBqKrykcM1iqnNGwuPZl5LpMxYE-08K/s1600-h/Tutorial1DdlEvent.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 274px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbeA_kxXpHmV0sa6tN9CeNZSAj3VACHw7AWvZqVIA9H-0YRUr_FRciggJFdmnkBqUPr3P8eEhTEptlf-uqrl0A99RRHuFDtLAhy1giBar_PLzGgxBqKrykcM1iqnNGwuPZl5LpMxYE-08K/s320/Tutorial1DdlEvent.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078456061500594&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click the &#39;...&#39; next to &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Remote service name&lt;/span&gt;&#39; and select the service we created earlier, &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;NotifyService&lt;/span&gt;&#39;.  You can leave the &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Broker service GUID&lt;/span&gt;&#39; as &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;current database&lt;/span&gt;&#39;, or browse to the Service Broker instance where the service was created.&lt;br /&gt;&lt;br /&gt;Click &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;OK&lt;/span&gt;&#39;.&lt;br /&gt;&lt;br /&gt;Follow the same steps to create the database level event, but choose the &lt;span style=&quot;font-weight: bold;&quot;&gt;&#39;CREATE_TABLE&lt;/span&gt;&#39; event instead.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXONmrbl69_ocpWFbom01wbfqXj33geiJrGGsDuN69Cx9Z_BDjZRoQ98JbcGc634TAvYA7rGVzPE73aEJR6K6Zs2uiE0-_LsPPSUc4cC9XlNEb1c6hs3h8olP7mhPYPmV6ZCfrBb3Tmr91/s1600-h/Tutorial1DdlEvent2.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 274px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXONmrbl69_ocpWFbom01wbfqXj33geiJrGGsDuN69Cx9Z_BDjZRoQ98JbcGc634TAvYA7rGVzPE73aEJR6K6Zs2uiE0-_LsPPSUc4cC9XlNEb1c6hs3h8olP7mhPYPmV6ZCfrBb3Tmr91/s320/Tutorial1DdlEvent2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078746005016722&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will now see the 2 event notifications listed in the grid below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizNheLf4EKvK12GNiVYJpDN-Ob4_uh-9RePNxn0pk1WWO2bEBPG9ote6m_sEbIWIQvfYutrHx5zs7hP8WqnX9B-Z8Pu5N5z437CgrkvISwG_lNF-iZNk3ZNZtBOQHX7w1QBGVdBYCFzu7t/s1600-h/Tutorial1Events.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 183px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizNheLf4EKvK12GNiVYJpDN-Ob4_uh-9RePNxn0pk1WWO2bEBPG9ote6m_sEbIWIQvfYutrHx5zs7hP8WqnX9B-Z8Pu5N5z437CgrkvISwG_lNF-iZNk3ZNZtBOQHX7w1QBGVdBYCFzu7t/s320/Tutorial1Events.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078823134515634&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;We are now ready to test the application.  Execute a script to create a database and a table. Nothing fancy, we just want to see the results of the application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKx4vefpxhVqfm7wsH-KJ9kjsqe7H6YuORkRY9MoVri-ouWILD68BPdKQk2OgwV1HyFyi4e9eUXz92VeAk3CG_CTOva8FRIKs-6MRisRIkyc5diFlaBKlgmXTjl5slN55SjyhNEy0LlhnE/s1600-h/Tutorial1Sql.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 127px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKx4vefpxhVqfm7wsH-KJ9kjsqe7H6YuORkRY9MoVri-ouWILD68BPdKQk2OgwV1HyFyi4e9eUXz92VeAk3CG_CTOva8FRIKs-6MRisRIkyc5diFlaBKlgmXTjl5slN55SjyhNEy0LlhnE/s320/Tutorial1Sql.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5348078910161940930&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Run 2 select statements to view the contents of the tables.&lt;br /&gt;&lt;br /&gt;The first result set is from the relational table log and the second is the message orientated log (with the raw XML posted below it.)&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/Images/Screens/TutorialResults.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 685px; height: 159px;&quot; src=&quot;http://www.devenius.com/Images/Screens/TutorialResults.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:78%;&quot;&gt;&amp;lt;EVENT_INSTANCE&amp;gt;&lt;br /&gt;&amp;lt;EventType&amp;gt;CREATE_TABLE&amp;lt;/EventType&amp;gt;&lt;br /&gt;&amp;lt;PostTime&amp;gt;2009-06-15T19:37:42.313&amp;lt;/PostTime&amp;gt;&lt;br /&gt;&amp;lt;SPID&amp;gt;51&amp;lt;/SPID&amp;gt;&lt;br /&gt;&amp;lt;ServerName&amp;gt;IRON\CARBON&amp;lt;/ServerName&amp;gt;&lt;br /&gt;&amp;lt;LoginName&amp;gt;sa&amp;lt;/LoginName&amp;gt;&lt;br /&gt;&amp;lt;UserName&amp;gt;dbo&amp;lt;/UserName&amp;gt;&lt;br /&gt;&amp;lt;DatabaseName&amp;gt;Application&amp;lt;/DatabaseName&amp;gt;&lt;br /&gt;&amp;lt;SchemaName&amp;gt;dbo&amp;lt;/SchemaName&amp;gt;&lt;br /&gt;&amp;lt;ObjectName&amp;gt;TestNotificationTable&amp;lt;/ObjectName&amp;gt;&lt;br /&gt;&amp;lt;ObjectType&amp;gt;TABLE&amp;lt;/ObjectType&amp;gt;&lt;br /&gt;&amp;lt;TSQLCommand&amp;gt;&lt;br /&gt;&amp;lt;SetOptions ANSI_NULLS=&quot;ON&quot; ANSI_NULL_DEFAULT=&quot;ON&quot; ANSI_PADDING=&quot;ON&quot; QUOTED_IDENTIFIER=&quot;ON&quot; ENCRYPTED=&quot;FALSE&quot; /&amp;gt;&lt;br /&gt;&amp;lt;CommandText&amp;gt;CREATE TABLE TestNotificationTable (Column1 int, Cloumn1 int)&amp;lt;/CommandText&amp;gt;&lt;br /&gt;&amp;lt;/TSQLCommand&amp;gt;&lt;br /&gt;&amp;lt;/EVENT_INSTANCE&amp;gt;&lt;/span&gt;</description><link>http://devenius.blogspot.com/2009/06/service-broker-assistant-event-logging.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgApzHGP6-55Qd03rXqdr1zWHvJzDpYScXyONHn7-j_CZRxsRDZISyLNkXxe4Xv8h5Z3PAg1IySiZBvdGAYO8DJKIYJ9zq_jeweIPik_v4jlFvwU74qbV_uZMTbs-A3pcEE0-AHgssgGz48/s72-c/Tutorial1Enable.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-29481898114156124</guid><pubDate>Mon, 08 Jun 2009 14:35:00 +0000</pubDate><atom:updated>2009-06-12T14:20:02.438-07:00</atom:updated><title>Now Available - Service Broker Assistant Standard Edition</title><description>We are excited to announce the release of our latest product Service Broker Assistant. Initially available in Standard Edition, Service Broker Assistant is an SSMS add-in that eases the development of creating SQL Server Service Broker objects. Common tasks normally accomplished through T-SQL can now be created through an easy to use UI that is made available directly in object explorer.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Service Broker Assistant Standard Edition is available for $99 and is compatible with both SQL Server 2005 and 2008. We are currently offering a 20% discount for the next 7 days. Enter &quot;&lt;span style=&quot;font-weight:bold;&quot;&gt;LaunchDiscount&lt;/span&gt;&quot; in the Discount Code box at checkout to receive 20% off Service Broker Assistant.&lt;br /&gt;&lt;br /&gt;With Service Broker Assistant you can accomplish the following tasks:&lt;br /&gt;&lt;br /&gt;Service Broker Configuration&lt;br /&gt;Create and Alter:&lt;br /&gt;&lt;br /&gt;Message Types&lt;br /&gt;Contracts&lt;br /&gt;Services&lt;br /&gt;Queues&lt;br /&gt;Routes&lt;/div&gt;&lt;div&gt;Service Endpoints&lt;br /&gt;XML Schema Collections&lt;br /&gt;Remote Service Bindings&lt;br /&gt;&lt;br /&gt;To learn more about Service Broker Assistant:&lt;br /&gt;&lt;a href=&quot;http://www.devenius.com/sba.aspx&quot;&gt;Service Broker Assistant&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are some sample screen shots:&lt;br /&gt;&lt;br /&gt;Configuration&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.devenius.com/images/Screens/Config.png&quot; width=&quot;400&quot; height=&quot;250&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Create Contract&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.devenius.com/images/Screens/contract.png&quot; width=&quot;400&quot; height=&quot;350&quot; /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Create XML Schema Collection&lt;br /&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.devenius.com/images/Screens/schema.png&quot; width=&quot;400&quot; height=&quot;350&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The professional version of Service Broker Assistant is coming soon. To learn more about the added features in professional edition check out our &lt;a href=&quot;http://www.devenius.com/SBAFeatures.aspx&quot;&gt;feature comparison page.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://devenius.blogspot.com/2009/06/now-available-service-broker-assistant.html</link><author>noreply@blogger.com (Chris)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-8563330059813323349</guid><pubDate>Tue, 02 Jun 2009 05:50:00 +0000</pubDate><atom:updated>2009-06-01T22:54:47.234-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Service Broker Assistant</category><title>Sneak Peek: Service Broker Assistant</title><description>Below are some screen shots of the soon-to-be-released Standard edition of SBA.&lt;br /&gt;&lt;br /&gt;Creating a Service Broker Endpoint...&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQ4BnhyphenhyphenwjspCR3eZJS6zy7XHMvUs0-P8tWGdcQB8JjDZx33Z_4GUGYoixbImSBFFrv_AVeHEiMy2aTIUR5el3xpUKawHZM_Achb-qZXmXEhicLfnpyXXzOL_2XEVrd-vvm35prkZx-HsW/s1600-h/Endpoint.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 265px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQ4BnhyphenhyphenwjspCR3eZJS6zy7XHMvUs0-P8tWGdcQB8JjDZx33Z_4GUGYoixbImSBFFrv_AVeHEiMy2aTIUR5el3xpUKawHZM_Achb-qZXmXEhicLfnpyXXzOL_2XEVrd-vvm35prkZx-HsW/s320/Endpoint.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5342604218972278786&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Adding A Route...&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQF9GZK7vKKzjWBMx916XuCSQk-8M0j-3eVuq9kcZfwgqJa8BOt-sRMKuaSs7a9FCn-lKz9Z4S6F0WKGotE-2xGgfO3Bwvzidk0RkI_clsQBZosQzjrT09w1jKDpYKqamek0O2rZvXcOIM/s1600-h/Route.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 265px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQF9GZK7vKKzjWBMx916XuCSQk-8M0j-3eVuq9kcZfwgqJa8BOt-sRMKuaSs7a9FCn-lKz9Z4S6F0WKGotE-2xGgfO3Bwvzidk0RkI_clsQBZosQzjrT09w1jKDpYKqamek0O2rZvXcOIM/s320/Route.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5342604334566697042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;New Service...&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgZ5jHu1WbVC4_qPUAapK0zDERHYLfaLqjM69hQP1pHXg0cVgq_GXjAF7I4y0D86dEiDntNFXoYyyePWdsgVgPJBH2Xv_qw5la7NYXp4cIjB_rMP3yuWpxd986vdiFJQN3FRgz1vkLSmnD/s1600-h/Service.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 265px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgZ5jHu1WbVC4_qPUAapK0zDERHYLfaLqjM69hQP1pHXg0cVgq_GXjAF7I4y0D86dEiDntNFXoYyyePWdsgVgPJBH2Xv_qw5la7NYXp4cIjB_rMP3yuWpxd986vdiFJQN3FRgz1vkLSmnD/s320/Service.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5342604468878462210&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</description><link>http://devenius.blogspot.com/2009/06/sneak-peek-service-broker-assistant.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQ4BnhyphenhyphenwjspCR3eZJS6zy7XHMvUs0-P8tWGdcQB8JjDZx33Z_4GUGYoixbImSBFFrv_AVeHEiMy2aTIUR5el3xpUKawHZM_Achb-qZXmXEhicLfnpyXXzOL_2XEVrd-vvm35prkZx-HsW/s72-c/Endpoint.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-7649523339796680292</guid><pubDate>Sun, 17 May 2009 23:33:00 +0000</pubDate><atom:updated>2009-08-03T12:25:13.135-07:00</atom:updated><title>SQL.CLR Standard Edition v.1.0.2.801 Released</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgMnbI1KPxe1Y-Y_cYPdNl-ZHKJGYR_BWqXtlVnmIDZd9Fq4c3IFF6yiCzfbpCQlJKyA7r0ra1B02fNNkcQnHcdcekVD7n4KHZD7bpYwI63E3aTiOEI-Locbpu5oIBB_7WFE9qLHvN6-B3/s1600-h/LogoSpaNew.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 128px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgMnbI1KPxe1Y-Y_cYPdNl-ZHKJGYR_BWqXtlVnmIDZd9Fq4c3IFF6yiCzfbpCQlJKyA7r0ra1B02fNNkcQnHcdcekVD7n4KHZD7bpYwI63E3aTiOEI-Locbpu5oIBB_7WFE9qLHvN6-B3/s400/LogoSpaNew.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5336942455610237330&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;SQL.CLR Standard Edition v.1.0.2.801 has been released. Included in this release is support for the output parameter type and SQL Server project integration.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;a style=&quot;font-family: trebuchet ms;&quot; href=&quot;http://www.devenius.com/sql_server_tools/sql_clr/SqlClr.aspx&quot;&gt;SQL.CLR Standard Edition&lt;/a&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style=&quot;font-family: trebuchet ms;&quot; href=&quot;http://www.devenius.com/sql_server_tools/sql_clr/SqlClr.aspx&quot;&gt;SQL.CLR Standard 2008 Edition&lt;/a&gt;</description><link>http://devenius.blogspot.com/2009/05/sqlclr-standard-edition-v102801.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgMnbI1KPxe1Y-Y_cYPdNl-ZHKJGYR_BWqXtlVnmIDZd9Fq4c3IFF6yiCzfbpCQlJKyA7r0ra1B02fNNkcQnHcdcekVD7n4KHZD7bpYwI63E3aTiOEI-Locbpu5oIBB_7WFE9qLHvN6-B3/s72-c/LogoSpaNew.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-4483160655541442694</guid><pubDate>Sat, 16 May 2009 01:33:00 +0000</pubDate><atom:updated>2009-06-20T13:44:26.493-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL CLR Stored Procedures</category><category domain="http://www.blogger.com/atom/ns#">SQL Server 2005</category><category domain="http://www.blogger.com/atom/ns#">SQL.CLR</category><title>You’ve Generated a CLR Procedure, Now What?</title><description>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;SQL.CLR makes it easy to generate CLR stored procedures and user defined functions. Just select then object and click go! One nice feature is that you can select the options to create a project and/or compile an assembly for deploying to SQL Server. This offers 2 ways to deploy the CLR object.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;First, by creating a SQL Server project, the code generated from the existing T-SQL object can be modified to add, edit or remove any custom business logic. This is where CLR really provides us with tremendous flexibility when designing our logic on the data. We have the entire .NET base class library, not to mention any custom libraries we have developed, to leverage in our project.&lt;/span&gt;  &lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;Once we have made the changes to our code, we can simply right-click our project and select “Deploy.”&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH1YrwupR8XWiOVaalsKUusbwaG6klCgKYJSHLTSG8vgNjy8Qjt3IG0M1Mk-8fcjkOPLcUwu5LM26Z1eTeaunQQ6RVXM9PWDTmcxq2EDy1Dr0wfcClvuVkNGnBdNduFPo9SQCw5rGAxqC8/s1600-h/Deploy.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 243px; height: 243px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH1YrwupR8XWiOVaalsKUusbwaG6klCgKYJSHLTSG8vgNjy8Qjt3IG0M1Mk-8fcjkOPLcUwu5LM26Z1eTeaunQQ6RVXM9PWDTmcxq2EDy1Dr0wfcClvuVkNGnBdNduFPo9SQCw5rGAxqC8/s400/Deploy.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5336233056742877538&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;The second option is to have SQL.CLR compile an assembly from the existing object. This means that we will not modify any existing logic in the code. From here we need to open SSMS and run a few lines of T-SQL to continue the deployment. Create an assembly in the database you wish to store the code for the object.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ASSEMBLY [Assembly_Name] &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;FROM &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;\\[Path_to_assembly]\[Assembly_Name].dll&#39; &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;WITH &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;PERMISSION_SET &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;SAFE&lt;/span&gt;&lt;/code&gt;                 &lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;&quot; &gt;&lt;/span&gt; &lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Next create the object, a stored procedure in this example with the format of:&lt;/span&gt;  &lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;&quot; &gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE PROCEDURE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[Procedure_Name] &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AS &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EXTERNAL NAME [AssemblyName].[Namespace.ClassName].[MethodName]&lt;/span&gt;&lt;/code&gt;                               &lt;br /&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;Now that we have deployed our assembly, created the stored procedure all that’s left is to execute the stored procedure…&lt;/span&gt;  &lt;span style=&quot;font-family:trebuchet ms;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;EXEC &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[Procedure_Name] &lt;/span&gt;&lt;/code&gt;</description><link>http://devenius.blogspot.com/2009/05/youve-generated-clr-procedure-now-what.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH1YrwupR8XWiOVaalsKUusbwaG6klCgKYJSHLTSG8vgNjy8Qjt3IG0M1Mk-8fcjkOPLcUwu5LM26Z1eTeaunQQ6RVXM9PWDTmcxq2EDy1Dr0wfcClvuVkNGnBdNduFPo9SQCw5rGAxqC8/s72-c/Deploy.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-1783895846537381536</guid><pubDate>Sun, 10 May 2009 13:58:00 +0000</pubDate><atom:updated>2009-06-20T13:49:47.038-07:00</atom:updated><title>Code Validation with Digital Signatures</title><description>One of the advantages of digital signatures is to authenticate certain information. How this is normally accomplished is that a person would use their private key to encrypt a given document or the document&#39;s fingerprint. Initially a hash function would be applied to the document generating a message digest.  The user would then encrypt the message digest using their &lt;span style=&quot;font-weight: bold;&quot;&gt;private&lt;/span&gt; key. That way if the recipient of the document wishes to authenticate that it has not been tampered with they could use the public key of the sender to decrypt the message digest. Then using the same hash function on the message the two results could be compared to determine if they match. If so, then the recipient can be ensured that the document has not been altered.&lt;br /&gt;&lt;br /&gt;Situations can occur where two different messages result in the same message digest. This is called a collision.&lt;br /&gt;&lt;br /&gt;Adding a digital signature to code in SQL Server provides a way to ensure that the code has not been tampered with. To check if a stored procedure, trigger, or assembly is authentic one can query the sys.crypt_properties table.  The thumbprint column will contain the value of the signing certificate&#39;s thumbprint for the object that has been signed.&lt;br /&gt;&lt;br /&gt;For Example, I have a stored procedure getEmployees that has been signed by Certificate Cert_01.&lt;br /&gt;&lt;br /&gt;The following query shows that getEmployees has been signed.&lt;br /&gt;&lt;br /&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;SELECT&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;OBJECT_NAME&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;crp.major_id&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;Procedure&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;cer.name &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;Certificate&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;crp.thumbprint&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;FROM&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sys.crypt_properties crp &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;INNER JOIN &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;sys.certificates cer&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ON &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;crp.thumbprint &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;cer.thumbprint &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Results:&lt;br /&gt;&lt;br /&gt;Procedure     Certificate     thumbprint&lt;br /&gt;---------     -----------     -----------------------------&lt;br /&gt;getEmployees  Cert_01         0xE879E7ECF3702DE6D27A9A28E8B7052D77695E41&lt;br /&gt;&lt;br /&gt;Now if I alter the stored procedure getEmployees no rows are returned.&lt;br /&gt;&lt;br /&gt;Results:&lt;br /&gt;Procedure     Certificate     thumbprint&lt;br /&gt;---------     -----------     -----------------------------&lt;br /&gt;(0 row(s) affected)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Given that the procedures was changed, the digital signature has been dropped by SQL Server.</description><link>http://devenius.blogspot.com/2009/05/code-validation-with-digital-signatures.html</link><author>noreply@blogger.com (Chris)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-8124218044319610162</guid><pubDate>Fri, 08 May 2009 18:18:00 +0000</pubDate><atom:updated>2009-05-08T11:18:23.396-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><title>SEA: Did You Know?</title><description>Cool feature even I forget about!&lt;br /&gt;&lt;br /&gt;Did you know...that from the object explorer in SEA, you can select an object and drag-and-drop it to the query window?  Nice!</description><link>http://devenius.blogspot.com/2009/05/sea-did-you-know.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-4470980833583695019</guid><pubDate>Fri, 08 May 2009 17:51:00 +0000</pubDate><atom:updated>2009-06-20T13:46:49.988-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption</category><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><category domain="http://www.blogger.com/atom/ns#">SQL Server 2005</category><title>Case of the SQL Encryption Mondays</title><description>&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;While we were developing SQL Encryption Assistant (SEA), we discovered an interesting if not scary tidbit with the encryption process.  It involves encrypting a column of data with a symmetric key.  Here’s the setup:&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt; &lt;/span&gt;&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;A simple 3 column table, we’ll call it CUSTOMER_DATA.  The columns are as follows:&lt;/span&gt; &lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style=&quot;font-family:lucida grande;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;CUS_ID – INT identity column&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;CUS_NAME – VARCHAR customer name&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;CUS_SSN – NVARCHAR(MAX) customer social security number&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE TABLE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo].[CUSTOMER_DATA]&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[CUS_ID] [int] &lt;/span&gt;&lt;span style=&quot;color: rgb(67, 67, 67);&quot;&gt;IDENTITY&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) NOT NULL,&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[CUS_Name] [varchar]&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;COLLATE SQL_Latin1_General_CP1_CI_AS &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL,&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[CUS_SSN] [nvarchar]&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;MAX&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;COLLATE SQL_Latin1_General_CP1_CI_AS &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;NULL&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;CONSTRAINT &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[PK_CUSTOMER_DATA] &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;PRIMARY KEY CLUSTERED&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;br /&gt;          &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[CUS_ID] &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ASC&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;WITH &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;IGNORE_DUP_KEY &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= OFF&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ON &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[PRIMARY]&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;ON &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[PRIMARY]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt; &lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;Add a row of data to the table.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;INSERT INTO &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;dbo.CUSTOMER_DATA &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CUS_Name&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CUS_SSN&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;CUS_DOB&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;)&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;VALUES &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;New Customer&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;123-456-789&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&#39;11/12/1970&#39;&lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;) &lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;Using SEA, we created a password-encrypted symmetric key named ColumnEncryptionKey.  This key will be used to encrypt a column of data in the table.  (Can you guess which one?)   Here’s what the T-SQL would look like:&lt;/span&gt; &lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;CREATE &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;SYMMETRIC &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;KEY &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[ColumnEncryptionKey]&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;AUTHORIZATION &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;[dbo]&lt;br /&gt;      &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;WITH &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ALGORITHM &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;TRIPLE_DES&lt;br /&gt;      ENCRYPTION &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;BY &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;PASSWORD &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;N&#39;1234qwer&#39; &lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;Now, using that symmetric key we encrypt the column of data.  To do this we need the decryption password of the key. &lt;/span&gt;&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt; No problem.  But, as usual, It’s a Monday and I haven’t had enough “fill-in-the-blank with your favorite caffeinated concoction”, and I ham-sandwiched the password.  Doh!  No problem, I’ll just enter it again, c-o-r-r-e-c-t-l-y and our column of SSNs will be safe.  But wait, there’s more!  There’s a red message from SSMS.  What could it be saying…&lt;/span&gt;  &lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hx4eI90f25TCOtZlCHem5wNQ6vgi9l3aSUVgOzd_QONS56uml4mKaxjpsda_yyq2SYzqWmvi9stmhFJYLmldKwqDX4pIxXPDnpkqS7UJ9JTPR4xWmbD4WyXYbOaYrBEUN2C1OK-AkL0x/s1600-h/Message.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 169px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hx4eI90f25TCOtZlCHem5wNQ6vgi9l3aSUVgOzd_QONS56uml4mKaxjpsda_yyq2SYzqWmvi9stmhFJYLmldKwqDX4pIxXPDnpkqS7UJ9JTPR4xWmbD4WyXYbOaYrBEUN2C1OK-AkL0x/s400/Message.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5333515240261378706&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;font-size:100%;&quot;  &gt;Msg 15313, Level 16, State 1, Line 1&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;font-size:100%;&quot;  &gt;The key is not encrypted using the specified decryptor.&lt;/span&gt;  &lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;Right, got it.  I know.  Wrong password.  But, that’s not the interesting piece.  Next line, please (drumroll)...&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;font-size:100%;&quot;  &gt;(1 row(s) affected)&lt;/span&gt;  &lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;WHAT!?!?!  It didn’t update the…I entered the wrong…what the…who the...why would it do that?  Let me check the table.&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;code style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;SELECT &lt;/span&gt;&lt;span style=&quot;color: gray;&quot;&gt;* &lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;FROM &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;dbo.CUSTOMER_DATA &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:trebuchet ms;font-size:100%;&quot;  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt; &lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgemPWq5ryORQ5G09vB6JzgaySKXr6l2thFQ5by9lfPRYY2RX5tFiRUMLKp8Xx19hV1veB8O6zXCE6vdJycnmenB7HFfLP3BB8ac7gmMGyxcP1CN82nPn8TxOzfBPClsopzRuSmVQP9sVXb/s1600-h/Null.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 323px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgemPWq5ryORQ5G09vB6JzgaySKXr6l2thFQ5by9lfPRYY2RX5tFiRUMLKp8Xx19hV1veB8O6zXCE6vdJycnmenB7HFfLP3BB8ac7gmMGyxcP1CN82nPn8TxOzfBPClsopzRuSmVQP9sVXb/s400/Null.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5333515011608171730&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:trebuchet ms;font-size:100%;&quot;  &gt;Noooooo!  It nulled out the data!  Yep, turns out if you enter the wrong decryptor, SQL Server goes ahead anyway with the failed encryption.  Your data is gone.  So, how do we fix this?  One, don’t enter the wrong decryptor.  Excellent, I’ll try and be more perfect next time.  Or, use SEA.  It will not let this happen and save you from yourself when you have a case of the “Mondays.”&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:lucida grande;font-size:100%;&quot;  &gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagDsIxldJN_shi_h3pYloSCSymM11Mzi9-WVXRZq_stJLPHRq2x1gdMSsTZD_PGzbQsho1gn6nxTWEG6tzDRX1lK9TR6tUElZk4eqRkUzLoWQ5jT_G1JBQwIuMjvEedNlEMcOysF4qqAn/s1600-h/Warning.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 336px; height: 145px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagDsIxldJN_shi_h3pYloSCSymM11Mzi9-WVXRZq_stJLPHRq2x1gdMSsTZD_PGzbQsho1gn6nxTWEG6tzDRX1lK9TR6tUElZk4eqRkUzLoWQ5jT_G1JBQwIuMjvEedNlEMcOysF4qqAn/s400/Warning.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5333515182142423042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://devenius.blogspot.com/2009/05/case-of-sql-encryption-mondays.html</link><author>noreply@blogger.com (Tim)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2hx4eI90f25TCOtZlCHem5wNQ6vgi9l3aSUVgOzd_QONS56uml4mKaxjpsda_yyq2SYzqWmvi9stmhFJYLmldKwqDX4pIxXPDnpkqS7UJ9JTPR4xWmbD4WyXYbOaYrBEUN2C1OK-AkL0x/s72-c/Message.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-5111488474141945930</guid><pubDate>Mon, 04 May 2009 03:28:00 +0000</pubDate><atom:updated>2009-08-03T12:27:09.557-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL.CLR</category><title>SQL.CLR Gets a Fresh Coat of Paint</title><description>Along with some minor tweaks, &lt;strong&gt;SQL.CLR&lt;/strong&gt;, our CLR procedure generator for SQL Server, got a makeover.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/images/Screens/WelcomeMed.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 250px; height: 227px;&quot; src=&quot;http://www.devenius.com/images/Screens/WelcomeMed.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/images/Screens/ObjectsMed.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 250px; height: 227px;&quot; src=&quot;http://www.devenius.com/images/Screens/ObjectsMed.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.devenius.com/sql_server_tools/sql_clr/SqlClr.aspx&quot; target=&quot;new&quot;&gt;SQL.CLR Product Page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SQL.CLR&lt;/strong&gt; now has a more &quot;wizard&quot; look-and-feel to it that is common to most tasks in SSMS. The window size was reduced to make it more manageable, added a welcome screen, changed some of the option locations to group them into a more logical order. Little things to make the app easier to use.&lt;br /&gt;&lt;br /&gt;But, the new paint job was the big one...hope you like it!</description><link>http://devenius.blogspot.com/2009/05/sqlclr-gets-fresh-coat-of-paint.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-4785324796780771530</guid><pubDate>Fri, 01 May 2009 22:26:00 +0000</pubDate><atom:updated>2009-05-04T15:44:29.209-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Service Broker Assistant</category><title>Service Broker Assistant : The Feature List</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/Images/Purchase/SBAFeaturesMed.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 450px; height: 573px;&quot; src=&quot;http://www.devenius.com/Images/Purchase/SBAFeaturesMed.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As we get closer to our initial release date, I wanted to put together a preliminary feature set for the product. Service Broker is a rich and flexible architecture, so what we are attempting to do is separate some of the basic object creation from some of the more interesting application building functionality.&lt;br /&gt;&lt;br /&gt;Both standard and professional editions will have basic creation features i.e. &lt;strong&gt;CREATE SERVICE&lt;/strong&gt;, &lt;strong&gt;CREATE QUEUE&lt;/strong&gt;, etc., as well as &lt;strong&gt;ALTER &lt;/strong&gt;functionality.  Plus, they will each be able to configure service broker.&lt;br /&gt;&lt;br /&gt;Some of the more advanced options will come in the professional edition.  Things like &quot;&lt;strong&gt;Common Task Automation&lt;/strong&gt;&quot; and &quot;&lt;strong&gt;Poison Message Detection and Removal&lt;/strong&gt;&quot;. These would include deactivating Service Broker message delivery, pausing service broker networking and configuring initiating and targeting service security.&lt;br /&gt;&lt;br /&gt;An important part of building service broker applications is the monitoring of the services. The professional edition will supply some basic monitoring features, performance monitoring and event tracing.&lt;br /&gt;&lt;br /&gt;As I said earlier, this is a preliminary sketch of the features we hope to include in the coming release of &lt;strong&gt;Service Broker Assistant&lt;/strong&gt;, but check back for more updates as the release approaches.&lt;br /&gt;&lt;br /&gt;FYI: We are still targeting late Q2 for the release :)</description><link>http://devenius.blogspot.com/2009/05/service-broker-assistant-feature-list.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-6511788869187040840</guid><pubDate>Sun, 26 Apr 2009 22:23:00 +0000</pubDate><atom:updated>2009-05-04T15:26:46.329-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><title>Digital Signatures with SEA</title><description>One of the features of SQL Encryption Assistant is providing an easy mechanism to digitally sign programmables in a SQL Server Database. For this example I have created the following&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A table named EMPLOYEES&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A procedure to select all rows from EMPLOYEES named getEmployees&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Digital Certificate named CERT_01&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I can now launch SQL Encryption Assistant inside Management Studio. Navigate to the certificate you wish to use for signing and right click to get to the Add Signature menu item.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/images/Screens/SEA_CertTasks.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 412px; height: 408px;&quot; src=&quot;http://www.devenius.com/images/Screens/SEA_CertTasks.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;From here I can sign procedures, functions, triggers, or assemblies. In the interest of keeping this simple, I will have a follow up post on counter signing on a later date.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Add Signature window will open upon selecting the menu item. As you can see below, I have selected the procedure getEmployees to be signed. I have also entered the password that was used to protect Cert_01.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.devenius.com/images/Screens/AddSignature2.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 417px; height: 346px;&quot; src=&quot;http://www.devenius.com/images/Screens/AddSignature2.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click OK to sign the procedure. I also would like to mention that once a programmable is signed, it will show up in the dependencies window for the certificate used in the signing.</description><link>http://devenius.blogspot.com/2009/05/digital-signatures-with-sea.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-3543614266146157454</guid><pubDate>Sun, 26 Apr 2009 03:21:00 +0000</pubDate><atom:updated>2009-05-04T15:22:06.825-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><title>SEA Pro 1.0.5.908 Update</title><description>SQL Encryption Assistant Professional Edition 1.0.5.908 has been released.&lt;br /&gt;&lt;br /&gt;To obtain the latest version see the FAQ post in our forum:&lt;br /&gt;&lt;a href=&quot;http://www.devenius.com/Forum.aspx?g=posts&amp;amp;t=21&quot; target=&quot;new&quot;&gt;How do I get the latest version of SQL Encryption Assistant?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Release Details&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Issue&lt;/strong&gt;&lt;br /&gt;Encrypt data by symmetric key protected by a password. Enter invalid password and click &quot;OK&quot;. Data will be null in selected column due to incorrect decryptor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Resolution&lt;/strong&gt;&lt;br /&gt;Encrypting and decrypting data by symmetric key protected by a password will not allow incorrect password to be entered. If an incorrect decryptor is entered the encryption or decryption process will be terminated and the data will not be null.</description><link>http://devenius.blogspot.com/2009/04/sea-pro-105908-update.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-516308470723777036</guid><pubDate>Sun, 26 Apr 2009 02:19:00 +0000</pubDate><atom:updated>2009-05-04T15:20:47.236-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mISV</category><title>The mISV Toolbox</title><description>Starting a mISV is challenging on so many levels, once you have an idea, a master plan or just some molecules scribbled on a napkin, the next step becomes a litany of questions.&lt;br /&gt;&lt;br /&gt;What platform will I develop on?&lt;br /&gt;What language?&lt;br /&gt;How will I deploy?&lt;br /&gt;Where do I host everything?&lt;br /&gt;What about e-Commerce? Marketing? Taxes?&lt;br /&gt;&lt;br /&gt;...it goes on and on.&lt;br /&gt;&lt;br /&gt;As a mISV we needed to take advantage of anything and everything with &#39;free&#39; attached to it. One of the areas I want to focus on in this post are the tools we have found indispensable to starting, building and growing the company. While some of these do cost money they are at the lower end of the cost spectrum in that space. Also worth noting is the &quot;build v. buy&quot; dilemma. We have in some cases decided to build tools ourselves in order to fill in the gaps. (more on this in a later post)&lt;br /&gt;&lt;br /&gt;First and foremost...&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/BizSpark/&quot; target=&quot;new&quot;&gt;Microsoft BizSpark&lt;/a&gt;&lt;br /&gt;BizSpark is uniquely designed to accelerate your success by providing fast, affordable access to current, full-featured Microsoft tools and technologies, plus production licensing for hosted solutions.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Development&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx&quot; target=&quot;new&quot;&gt;DebugView&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.red-gate.com/products/reflector/&quot; target=&quot;new&quot;&gt;Reflector&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.vizacc.com/helpmaker7.aspx&quot; target=&quot;new&quot;&gt;HelpMaker&lt;/a&gt;&lt;br /&gt;HelpMaker is RTF-based, page-layout Help Authoring tool. It generates WinHelp, HTML_Help, Website-Help and PDF.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://tortoisesvn.tigris.org/&quot; target=&quot;new&quot;&gt;TortoiseSVN&lt;/a&gt;&lt;br /&gt;TortoiseSVN is a really easy to use Revision control / version control / source control software for Windows.&lt;br /&gt;Since it&#39;s not an integration for a specific IDE you can use it with whatever development tools you like.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.jrsoftware.org/isinfo.php&quot; target=&quot;new&quot;&gt;Inno Setup&lt;/a&gt;&lt;br /&gt;Inno Setup is a free installer for Windows programs. Versatile and flexible.  Love this tool.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://unfuddle.com/&quot; target=&quot;new&quot;&gt;Unfuddle&lt;/a&gt;&lt;br /&gt;Unfuddle is a secure, hosted project management solution for software development teams.&lt;br /&gt;&lt;br /&gt;Code Obfuscation Software($)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Media&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://www.brianapps.net/sizer.html&quot; target=&quot;new&quot;&gt;Sizer&lt;/a&gt;&lt;br /&gt;Allows you to resize any window to an exact, predefined size. This is extremely useful when designing web pages, as it allows you to see how the page will look when viewed at a smaller size. The utility is also handy when compiling screen-shots for documentation, using Sizer allows you to easily maintain the same window size across screen grabs.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.paint.net/&quot; target=&quot;new&quot;&gt;Paint.NET&lt;/a&gt;&lt;br /&gt;Wow! What a tool.  So easy a developer can use it!  We have used Paint.NET for all our graphics.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.debugmode.com/wink/&quot; target=&quot;new&quot;&gt;Wink&lt;/a&gt;&lt;br /&gt;A Tutorial and Presentation creation software, primarily aimed at creating tutorials on how to use software (like a tutor for MS-Word/Excel etc). Using Wink you can capture screen shots, add explanations boxes, buttons, titles etc and generate a highly effective tutorial for your users. Very easy to use, had 2-3 demos up in a couple of hours.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Marketing&lt;/strong&gt;&lt;br /&gt;Google Analytics&lt;br /&gt;Google Adwords ($)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.histats.com/&quot; target=&quot;new&quot;&gt;HiStats&lt;/a&gt;&lt;br /&gt;Adds a different view on site analytics.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.clicktale.com/default.aspx&quot; target=&quot;new&quot;&gt;ClickTale&lt;/a&gt;&lt;br /&gt;ClickTale is an in-page web analytics tool that allows you to record your users as they browse your site. Very powerful tool for us as it has helped us to design and redesign our site several times from this &quot;virtual feedback&quot;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.kampyle.com/&quot; target=&quot;new&quot;&gt;Kampyle&lt;/a&gt;&lt;br /&gt;Online feedback app to intake user feedback.  Easy to install and customize.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.squidoo.com/&quot; target=&quot;new&quot;&gt;Squidoo&lt;/a&gt;&lt;br /&gt;A publishing platform and community that makes it easy for you to create &quot;lenses&quot; online. Lenses are pages, kind of like flyers or signposts or overview articles, that gather everything you know about your topic of interest—and snap it all into focus.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;eCommerce&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://www.e-junkie.com/&quot; target=&quot;new&quot;&gt;e-Junkie&lt;/a&gt; ($)&lt;br /&gt;E-junkie provides shopping cart and buy now button functionality for site selling products online. Great service, low cost and feature rich.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.paypal.com/&quot; target=&quot;new&quot;&gt;PayPal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://www.teamviewer.com/index.aspx&quot; target=&quot;new&quot;&gt;TeamViewer&lt;/a&gt;&lt;br /&gt;Wonderful app to communicate, share destops, remote support.&lt;br /&gt;&lt;br /&gt;FileZilla&lt;br /&gt;Messenger&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.yetanotherforum.net/&quot; target=&quot;new&quot;&gt;Yet Another Forum.net&lt;/a&gt;&lt;br /&gt;YetAnotherForum.NET (YAF) is a Open Source discussion forum or bulletin board system for web sites running ASP.NET.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.webmasterdeveloper.com/dotblog.aspx&quot; target=&quot;new&quot;&gt;.Blog&lt;/a&gt;&lt;br /&gt;Open source ASP.NET blog software.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.twitter.com/&quot; target=&quot;new&quot;&gt;Twitter&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.facebook.com/&quot; target=&quot;new&quot;&gt;Facebook&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Misc&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;http://keepass.info/&quot; target=&quot;new&quot;&gt;KeePass&lt;/a&gt;&lt;br /&gt;Free open source password manager, something you will definitely need as you open accounts.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.asp-shareware.org/pad/&quot; target=&quot;new&quot;&gt;PADGen&lt;/a&gt;&lt;br /&gt;PAD is the Portable Application Description, and it helps authors provide product descriptions and specifications to online sources in a standard way, using a standard data format that will allow webmasters and program librarians to automate program listings. PAD saves time for both authors and webmasters&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://support.microsoft.com/kb/916902&quot; target=&quot;new&quot;&gt;VCdControlTool&lt;/a&gt;&lt;br /&gt;Mount ISOimages as virtual CD drives.</description><link>http://devenius.blogspot.com/2009/04/misv-toolbox.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7454131984813719395.post-3077583794906582038</guid><pubDate>Sat, 25 Apr 2009 03:22:00 +0000</pubDate><atom:updated>2009-05-04T15:22:37.704-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SQL Encryption Assistant</category><title>SEA Pro 2008 1.0.5.908 Update</title><description>SQL Encryption Assistant Professional 2008 Edition 1.0.5.908 has been released.&lt;br /&gt;&lt;br /&gt;To obtain the latest version see the FAQ post in our forum:&lt;br /&gt;&lt;a href=&quot;http://www.devenius.com/Forum.aspx?g=posts&amp;amp;t=21&quot; target=&quot;new&quot;&gt;How do I get the latest version of SQL Encryption Assistant?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Release Details&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Issue&lt;/strong&gt;&lt;br /&gt;Encrypt data by symmetric key protected by a password. Enter invalid password and click &quot;OK&quot;. Data will be null in selected column due to incorrect decryptor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Resolution&lt;/strong&gt;&lt;br /&gt;Encrypting and decrypting data by symmetric key protected by a password will not allow incorrect password to be entered. If an incorrect decryptor is entered the encryption or decryption process will be terminated and the data will not be null.</description><link>http://devenius.blogspot.com/2009/04/sea-pro-2008-105908-update.html</link><author>noreply@blogger.com (Tim)</author><thr:total>0</thr:total></item></channel></rss>