<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" 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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DE8EQX84cSp7ImA9WhBaEkk.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389</id><updated>2013-05-22T19:20:00.139+01:00</updated><category term="indexes" /><category term="openrowset" /><category term="active directory" /><category term="tools" /><category term="sysadmin" /><category term="tsql" /><category term="news" /><category term="windows 2008 R2" /><category term="web" /><category term="tds" /><category term="sql agent" /><category term="community" /><category term="bookmark. ssc" /><category term="storage" /><category term="restore" /><category term="group policy" /><category term="iphone" /><category term="configuration" /><category term="powershell" /><category term="function" /><category term="searching" /><category term="video" /><category term="email" /><category term="video notes" /><category term="performance" /><category term="collation" /><category term="xp" /><category term="asp" /><category term="xml" /><category term="sql 2012" /><category term="virtualbox" /><category term="erformance" /><category term="iis" /><category term="hyper-v" /><category term="mysql" /><category term="security" /><category term="cdc" /><category term="event forwarding" /><category term="schema" /><category term="service broker" /><category term="101" /><category term="Agile / Scrum" /><category term="memory" /><category term="ssis" /><category term="wsus" /><category term="networking" /><category term="schemas" /><category term="sql 2005" /><category term="constraints" /><category term="permissions" /><category term="ssrs" /><category term="compatibility" /><category term="view" /><category term="mac" /><category term="sqlbits" /><category term="design" /><category term="virtual pc 2007" /><category term="datetime" /><category term="testing" /><category term="blogging" /><category term="vista" /><category term="annoyances" /><category term="opendatasource" /><category term="jdbc" /><category term="admin" /><category term="sql 2011" /><category term="pivot" /><category term="dynamic sql" /><category term="partitioning" /><category term="nulls" /><category term="blocking" /><category term="compression" /><category term="shrink" /><category term="excel" /><category term="reporting services" /><category term="systems" /><category term="crosstab" /><category term="sql 2000" /><category term="code" /><category term="windows 2000" /><category term="table compression" /><category term="scripts" /><category term="Windows 7" /><category term="vba" /><category term="diagramming" /><category term="linked servers" /><category term="dmv" /><category term="windows 2008" /><category term="resource governor" /><category term="synonyms" /><category term="backups" /><category term="system objects" /><category term="sql 2008 r2" /><category term="clr" /><category term="bookmark" /><category term="ole" /><category term="BI" /><category term="career" /><category term="connectivity" /><category term="sqlservercentral" /><category term="caching" /><category term="recovery mode" /><category term="sql 2008" /><category term="datawarehouse" /><category term="replication" /><category term="pbm" /><title>sql solace</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://sqlsolace.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>967</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SqlSolace" /><feedburner:info uri="sqlsolace" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE8EQX8-fyp7ImA9WhBaEkk.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-4459937260215713509</id><published>2013-05-22T19:20:00.000+01:00</published><updated>2013-05-22T19:20:00.157+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-22T19:20:00.157+01:00</app:edited><title>Link : Move Database Data Without Taking the Database Offline</title><content type="html">&lt;a href="http://sqlmag.com/t-sql/move-database-files-without-taking-database-offline"&gt;This article&lt;/a&gt; shows how you can move database data to a new .MDF data file via the ALTER DATABASE and DBCC SHRINKFILE commands.&lt;br /&gt;
&lt;br /&gt;
Pros&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Can be done online&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Cons&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Speed&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Cannot move system objects&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Index Fragmentation may be caused&lt;/li&gt;
&lt;/ol&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/QHSPH9x0w4Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/4459937260215713509/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=4459937260215713509&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/4459937260215713509?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/4459937260215713509?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/QHSPH9x0w4Q/link-move-database-data-without-taking.html" title="Link : Move Database Data Without Taking the Database Offline" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/05/link-move-database-data-without-taking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8ERXk9eyp7ImA9WhBUEE0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-5187474507915982363</id><published>2013-04-26T20:00:00.000+01:00</published><updated>2013-04-26T20:00:04.763+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-26T20:00:04.763+01:00</app:edited><title>Link :32Bit SQL on a 64 Bit Box </title><content type="html">I've seen this on a number of boxes now.&lt;br /&gt;
32bit SQL in a 64bit environment.&lt;br /&gt;
&lt;br /&gt;
{screams silently}&lt;br /&gt;
&lt;br /&gt;
Thomas LaRock has a script to test for this -&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://thomaslarock.com/2013/01/how-to-determine-if-you-are-running-a-32-bit-version-of-sql-server-on-a-64-bit-os/" target="_blank"&gt;HOW TO: Determine If You Are Running A 32-bit Version Of SQL Server On A 64-bit O/S&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/o-YXNPg6woQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/5187474507915982363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=5187474507915982363&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5187474507915982363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5187474507915982363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/o-YXNPg6woQ/link-32bit-sql-on-64-bit-box.html" title="Link :32Bit SQL on a 64 Bit Box " /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/04/link-32bit-sql-on-64-bit-box.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCQXozfyp7ImA9WhBWFUg.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-3185195819343105748</id><published>2013-04-03T20:18:00.000+01:00</published><updated>2013-04-10T01:19:20.487+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-10T01:19:20.487+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="career" /><title>MCSE : Data Platform SQL 2012</title><content type="html">Over the past 3 weeks I have taken (and passed) the following three SQL Server 2012 upgrade exams -&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-457" target="_blank"&gt;70-457 : Transition Your MCTS on SQL Server 2008 to MCSA: SQL Server 2012, Part 1&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-458" target="_blank"&gt;70-458 : Transition Your MCTS on SQL Server 2008 to MCSA: SQL Server 2012, Part 2&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-459" target="_blank"&gt;70-459 : Transition Your MCITP: Database Administrator 2008 or MCITP: Database Developer 2008 to MCSE: Data Platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
The first 2 exams made me an MCSA, completing the third made me an MCSE for Data platform. A little confusing as I was already an MCSE some years ago. To clarify...&lt;br /&gt;
&lt;br /&gt;
The old world MCSE (I did mine on Windows 2000) stood for Microsoft Certified Systems Engineer.&lt;br /&gt;The new MCSE is an acronym for Microsoft Certified Solutions Expert.&lt;br /&gt;
&lt;br /&gt;
All the new professional exams are MCSEs with the exact titles differing as per the product specialism.&lt;br /&gt;
&lt;br /&gt;
Link : &lt;a href="http://www.microsoft.com/learning/en/us/mcse-certification.aspx" target="_blank"&gt;New MCSE Certifications&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/G6glCq9gW8I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/3185195819343105748/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=3185195819343105748&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3185195819343105748?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3185195819343105748?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/G6glCq9gW8I/mcse-data-platform-sql-2012.html" title="MCSE : Data Platform SQL 2012" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/04/mcse-data-platform-sql-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBQXk_cCp7ImA9WhBXGEw.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-5811757414520224076</id><published>2013-04-01T02:41:00.002+01:00</published><updated>2013-04-01T11:50:50.748+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-01T11:50:50.748+01:00</app:edited><title>Link : Relational Databases Aren't Dead.</title><content type="html">I like this link.&lt;br /&gt;
&lt;br /&gt;
I like it because academic developers whom are keen on CV polishing are convinced the RDBMS is old news. If it's not an ORM model or even better a NoSQL implementation like Cassandra or MongoDB then it's old hat.&lt;br /&gt;
&lt;br /&gt;
Yes, they can scale immensely which is fantastic but they are not suitable everywhere, Those implementations don't lend themselves to structure, to referential integrity and the beauty of having one master version of a data set. &lt;br /&gt;
&lt;br /&gt;
I'll let the title speak for itself ... &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://readwrite.com/2013/03/26/relational-databases-far-from-dead" target="_blank"&gt;Relational Databases Aren't Dead. Heck, They're Not Even Sleeping&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/FVowxJ5e96A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/5811757414520224076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=5811757414520224076&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5811757414520224076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5811757414520224076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/FVowxJ5e96A/link-relational-databases-arent-dead.html" title="Link : Relational Databases Aren't Dead." /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/04/link-relational-databases-arent-dead.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cGQ344eCp7ImA9WhBWFk4.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-8919604972078372148</id><published>2013-03-27T01:09:00.000Z</published><updated>2013-04-11T01:10:22.030+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-11T01:10:22.030+01:00</app:edited><title>Formatting FAT32 Volumes larger than 32 GB</title><content type="html">For an exercise in (ahem) modding a games console, I needed to format an external USB drive to FAT32.&lt;br /&gt;
On doing so, I found I couldn't do so...&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;Microsoft Windows [Version 6.1.7601]&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Copyright (c) 2009 Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;C:\Users\RMD&amp;gt;&lt;span style="color: red;"&gt;format g: /q /fs:fat32&lt;/span&gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;The type of the file system is NTFS.&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;The new file system is FAT32.&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;WARNING, ALL DATA ON NON-REMOVABLE DISK&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;DRIVE G: WILL BE LOST!&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Proceed with Format (Y/N)? y&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;QuickFormatting 238472M&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: red;"&gt;The volume is too big for FAT32.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;The solution I used was to find a tool that would perform the format.&lt;br /&gt;
&lt;a href="http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm" target="_blank"&gt;Fat32Format&lt;/a&gt; by Ridgecrop Consultants is as good as any, i.e. it is fast and free.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;C:\Users\RMD&amp;gt;&lt;span style="color: red;"&gt;fat32format g:&lt;/span&gt;&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Warning ALL data on drive 'g' will be lost irretrievably, are you sure&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;(y/n) :y&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Size : 250GB 488392002 sectors&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;512 Bytes Per Sector, Cluster size 32768 bytes&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Volume ID is 1ee6:304a&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;32 Reserved Sectors, 59604 Sectors per FAT, 2 fats&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;7629261 Total clusters&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;7629260 Free Clusters&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Formatting drive g:...&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Clearing out 119304 sectors for Reserved sectors, fats and root cluster...&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Wrote 61083648 bytes in 2.33 seconds, 25.05 Megabytes/sec&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Initialising reserved sectors and FATs...&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;Done&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;C:\Users\RMD&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/QTzuet8JQIw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/8919604972078372148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=8919604972078372148&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8919604972078372148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8919604972078372148?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/QTzuet8JQIw/formatting-fat32-volumes-larger-than-32.html" title="Formatting FAT32 Volumes larger than 32 GB" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/03/formatting-fat32-volumes-larger-than-32.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CSHo8cCp7ImA9WhBXEkQ.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-5166188733193195912</id><published>2013-03-23T23:01:00.004Z</published><updated>2013-03-26T11:56:09.478Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-26T11:56:09.478Z</app:edited><title>SQL 2012 on Windows 2012 : Install Stuck</title><content type="html">My install of SQL Server 2012 on Windows 2012 hung today on&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;'Enabling OS feature 'NetFx3'&lt;/span&gt;&lt;/blockquote&gt;
A little searching drove me to this blog post - &lt;a href="http://www.sqlcoffee.com/Troubleshooting101.htm" target="_blank"&gt;Error while enabling Windows feature NetFx3&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The instructions above show how to resolve it, but you need to add ".NET Framework 3.5 Features" as a feature via the Add Roles and Features Wizard.&lt;br /&gt;
&lt;br /&gt;
Why this couldnt have been detected in the prerequisites part of the install check, I don't know....&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/H1GpX5lrTIs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/5166188733193195912/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=5166188733193195912&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5166188733193195912?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5166188733193195912?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/H1GpX5lrTIs/sql-2012-on-windows-2012-install-stuck.html" title="SQL 2012 on Windows 2012 : Install Stuck" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/03/sql-2012-on-windows-2012-install-stuck.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAEQ3k8eip7ImA9WhBQGEg.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-1928283949739135938</id><published>2013-03-20T12:30:00.002Z</published><updated>2013-03-21T08:15:02.772Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T08:15:02.772Z</app:edited><title>SQL 2008 - Debugging failed backups</title><content type="html">Here are some steps I followed today on SQL 2008 concerning some failed backups (not my server)...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Maintenance plan history&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Viewing the history of the Maintenance plan shows 2 things&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The Success/Failure of the plan&lt;/li&gt;
&lt;li&gt;Which Task it has failed on&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Detail concerning a failure is buried in a single line error message for each Maintenance Plan task.&lt;br /&gt;
&lt;br /&gt;
Maintenance plan errors tend to obfuscate the true cause as a Maintenance Plan is an Integration Services wrapper around database management tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;" Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.&amp;nbsp; End ...&amp;nbsp; The package execution fa...&amp;nbsp; The step failed. "&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
A SSIS developer would understand these errors, a DBA maybe not so.&lt;br /&gt;
&lt;br /&gt;
If a task was backing up mulitple databases and the final one failed, there is a lot of text to wade through. Creating log files on our Maintenance plans is the way to go to log at this level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SQL Server Agent History&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Again the agent history hides the details we are after.&lt;br /&gt;
When a maintenance plan is scheduled, an agent job is created to run it.&lt;br /&gt;
The agent job has a parent entry with step ID 0 which reveals the job outcome.&lt;br /&gt;
The maintenance plan is implemented as a single step (step ID 1).&lt;br /&gt;
Even if a small part of the plan fails, the whole agent step (and parent job) are seen to fail.&lt;br /&gt;
The message output here is displayed over several lines and is more readable. It still lacks the detail we want however.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SQL Server Logs&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
These can be accessed via management studio or the event viewer.&lt;br /&gt;
Focusing here on one database, we can locate the reported cause much easier.&lt;br /&gt;
&lt;br /&gt;
SQL Server Logs show 3 separate entries for each backup failure.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20/03/2013 9:17:03 AM&lt;br /&gt;Log&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL Server (Current - 20/03/2013 9:42:00 AM)&lt;br /&gt;&lt;br /&gt;Source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Backup&lt;br /&gt;&lt;br /&gt;Message&lt;br /&gt;BACKUP failed to complete the command BACKUP DATABASE Obfuscated. Check the backup application log for detailed messages.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Generic Backup Failure Message, followed by the detail below&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20/03/2013 9:17:03 AM&lt;br /&gt;Log&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL Server (Current - 20/03/2013 9:42:00 AM)&lt;br /&gt;&lt;br /&gt;Source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Backup&lt;br /&gt;&lt;br /&gt;Message&lt;br /&gt;Error: 3041, Severity: 16, State: 1.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Yes, the backup has failed, we could search for Severity 16, State 1 if we wished.&lt;br /&gt;
The next step tells us more however.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20/03/2013 9:17:03 AM&lt;br /&gt;Log&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL Server (Current - 20/03/2013 9:42:00 AM)&lt;br /&gt;&lt;br /&gt;Source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spid76&lt;br /&gt;&lt;br /&gt;Message&lt;br /&gt;BackupDiskFile::CreateMedia: Backup device 'R:\BACKUP\FULL\Obfuscated\Obfuscated_backup_2013_03_18_225452_3071857.bak' failed to create. Operating system error 5(failed to retrieve text for this error. Reason: 15105).&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
So we need to look up OS Error 5&lt;br /&gt;
&lt;br /&gt;
From a command prompt, lookup the OS error message like this,&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;NET HELPMSG 5&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Ia99MiS3Xyw/UUmrt1_gq8I/AAAAAAAAAyw/DUHxDwTn4nE/s1600/nethelpmsg.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-Ia99MiS3Xyw/UUmrt1_gq8I/AAAAAAAAAyw/DUHxDwTn4nE/s400/nethelpmsg.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
" Access is denied " is fairly blatantly a security thing that I resolved by giving a more generous range set of permissions to the service account responsible for performing the backups.&lt;br /&gt;
&lt;br /&gt;
I never did get to the bottom of how the permissions changed in the first place though. I suspect a change in group membership for the service account but I'll never be able to prove it.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/iB5buKfcf24" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/1928283949739135938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=1928283949739135938&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1928283949739135938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1928283949739135938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/iB5buKfcf24/blog-post.html" title="SQL 2008 - Debugging failed backups" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Ia99MiS3Xyw/UUmrt1_gq8I/AAAAAAAAAyw/DUHxDwTn4nE/s72-c/nethelpmsg.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/03/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIBSXc7cSp7ImA9WhBVF04.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-6756931687227696339</id><published>2013-03-13T17:58:00.000Z</published><updated>2013-04-23T18:02:38.909+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-23T18:02:38.909+01:00</app:edited><title>TSQL : Find the largest table</title><content type="html">A script to find the largest table in the current database.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT  t.name, s.row_count
FROM sys.dm_db_partition_stats s
INNER JOIN sys.tables t
ON t.object_id = s.object_id
WHERE s.index_id &amp;lt; 2
ORDER BY s.row_count DESC
&lt;/pre&gt;
&lt;br /&gt;
This works for SQL 2005 up ...&lt;br /&gt;
&lt;br /&gt;
To do this in SQL 2000, you would have to use &lt;a href="http://sqlsolace.blogspot.co.uk/2009/03/table-size.html" target="_blank"&gt;sp_spaceused&lt;/a&gt; and &lt;a href="http://sqlsolace.blogspot.co.uk/2008/11/table-sizes-script.html" target="_blank"&gt;loop through all tables&lt;/a&gt;.
 
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/hD7-YGM9Feo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/6756931687227696339/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=6756931687227696339&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/6756931687227696339?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/6756931687227696339?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/hD7-YGM9Feo/tsql-find-largest-table.html" title="TSQL : Find the largest table" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/03/tsql-find-largest-table.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYCSXw4eyp7ImA9WhBXGEQ.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-2109997047100288243</id><published>2013-03-07T20:48:00.000Z</published><updated>2013-04-02T10:49:28.233+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T10:49:28.233+01:00</app:edited><title>SQL Server 2012 : Offset / Fetch</title><content type="html">SQL Server 2012 launches Offset/Fetch which provide server side paging of results sets.&lt;br /&gt;
&lt;br /&gt;
A Simplified example is this - &lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;SELECT&lt;br /&gt;&amp;nbsp; [columnlist]&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;FROM&lt;br /&gt;&amp;nbsp; [table]&lt;br /&gt;ORDER BY [column]&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;OFFSET &lt;span style="color: red;"&gt;[offset]&lt;/span&gt; ROWS&lt;br /&gt;FETCH NEXT &lt;span style="color: red;"&gt;[rowcount]&lt;/span&gt; ROWS ONLY;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The new options are market in red above, and are -&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;[offset] - Position to start retrieving rows from.&lt;/li&gt;
&lt;li&gt;[rowcount] - How many rows to retrieve&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
You've been able to achieve this in the past with a little ingenuity as the table below shows.&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" cellpadding="4" cellspacing="1" style="width: 100%px;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
 &lt;td&gt;SQL&amp;nbsp;Server&lt;/td&gt;
 &lt;td&gt;Method&lt;/td&gt;
 &lt;td&gt;Links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td&gt;&lt;br /&gt;
2012&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;
 &lt;td&gt;OFFSET &amp;amp; FETCH&lt;/td&gt;
 &lt;td&gt;&lt;a href="http://www.dbadiaries.com/new-t-sql-features-in-sql-server-2012-offset-and-fetch"&gt;New T-SQL features in SQL Server 2012 – OFFSET and FETCH&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pertell.com/sqlservings/archive/2012/07/offset-fetch-in-sql-server-2012/"&gt;OFFSET – FETCH in SQL Server 2012&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td&gt;&lt;br /&gt;
2005&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;
 &lt;td&gt;ROW_NUMBER()&lt;/td&gt;
 &lt;td&gt;&lt;a href="http://blogs.x2line.com/al/archive/2005/11/18/1323.aspx"&gt;T-SQL: Paging with ROW_NUMBER()&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td&gt;&lt;br /&gt;
2000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;
 &lt;td&gt;SET&amp;nbsp;ROWCOUNT&amp;nbsp;Trick&lt;/td&gt;
 &lt;td&gt;&lt;a href="http://www.4guysfromrolla.com/webtech/042606-1.shtml"&gt;A More Efficient Method for Paging Through Large Result Sets&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/ejYQ3klQpR8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/2109997047100288243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=2109997047100288243&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2109997047100288243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2109997047100288243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/ejYQ3klQpR8/sql-server-2012-offset-fetch.html" title="SQL Server 2012 : Offset / Fetch" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/03/sql-server-2012-offset-fetch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUCQHgzfCp7ImA9WhBXGU0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-6043421860442711647</id><published>2013-02-07T19:24:00.000Z</published><updated>2013-04-02T12:31:01.684+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T12:31:01.684+01:00</app:edited><title>The TABLE custom type / Using a TVP - Table Valued Parameter</title><content type="html">Some Code to demonstrate&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Creating a custom TABLE type &lt;/li&gt;
&lt;li&gt;Passing a Table as a parameter (Table Valued Parameter)&lt;/li&gt;
&lt;/ol&gt;
In reality my 80s themed example would be far more exciting... &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SET NOCOUNT ON;
GO

-- Create Target Table
CREATE TABLE EightiesHits
  (Artist VARCHAR(50)
  ,Title VARCHAR(50)
  ,ReleaseYear NUMERIC(4,0))
GO

-- Create Custom Type
CREATE TYPE Release AS TABLE
  (Artist VARCHAR(50)
  ,Title VARCHAR(50)
  ,ReleaseYear NUMERIC(4,0));
GO

-- Create Stored Procedure to demonstrate passing a table valued parameter.
CREATE PROCEDURE dbo.AddToCollection
    @TVPRelease Release READONLY
AS 
  SET NOCOUNT ON
  INSERT INTO EightiesHits
          (Artist,Title,ReleaseYear)
  SELECT Artist,Title,ReleaseYear
  FROM  @TVPRelease;
GO

-- Declare TVP
DECLARE @EightiesTunesTVP AS Release;

-- Put some data in!
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Do They Know It''s Christmas?', 'Band Aid', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('I Just Called to Say I Love You', 'Stevie Wonder', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Relax', 'Frankie Goes to Hollywood', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Two Tribes', 'Frankie Goes to Hollywood', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Careless Whisper', 'George Michael', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Last Christmas / Everything She Wants (Remix)', 'Wham!', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Hello', 'Lionel Richie', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Agadoo', 'Black Lace', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Ghostbusters', 'Ray Parker, Jr', 1984)
INSERT INTO @EightiesTunesTVP(Artist,Title,ReleaseYear)  
  VALUES ('Freedom', 'Wham!', 1984)

-- Now pass te contents of TVP @EightiesTunesTVP 
-- to table EightiesHits via stored procedure AddToCollection
EXEC AddToCollection @EightiesTunesTVP;

-- Now prove the data is there
SELECT * FROM EightiesHits

--Clean up
DROP TABLE EightiesHits;
DROP PROCEDURE AddToCollection;
DROP TYPE Release;
GO
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/Kk33FvlSSj4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/6043421860442711647/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=6043421860442711647&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/6043421860442711647?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/6043421860442711647?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/Kk33FvlSSj4/the-table-custom-type-using-tvp-table.html" title="The TABLE custom type / Using a TVP - Table Valued Parameter" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/the-table-custom-type-using-tvp-table.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBSX48eCp7ImA9WhBXFk0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-1936056846396796292</id><published>2013-02-06T01:58:00.000Z</published><updated>2013-03-30T02:07:38.070Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-30T02:07:38.070Z</app:edited><title>OPTIMIZE FOR UNKNOWN and other query hints</title><content type="html">Query Hints go in the OPTION clause at the end of a query.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;SELECT &amp;lt;columnlist&amp;gt;&lt;br /&gt;FROM &amp;lt;table&amp;gt;&lt;br /&gt;WHERE &amp;lt;clause&amp;gt;&lt;br /&gt;OPTION(query hint)&lt;/span&gt;&lt;/blockquote&gt;
The only one I've really had cause to use in the past is MAXDOP 1 to prevent large queries unsuccessfully using multiple processors.&lt;br /&gt;
&lt;br /&gt;Some new ones (to me) I read about today, are...&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;KEEP PLAN - Reduces likelihood of plan recompilation by relaxing the recompile threshold.&lt;/li&gt;
&lt;li&gt;KEEPFIXED PLAN - Tells optimiser not to recompile plan even if statistics have changed.&lt;/li&gt;
&lt;li&gt;ROBUST PLAN - Use plan with maximum possible rowsize.&lt;/li&gt;
&lt;li&gt;OPTIMIZE FOR (parameter value) - use this value as a local variable in query optimization&lt;/li&gt;
&lt;li&gt;OPTIMIZE FOR UNKNOWN (New to SQL 2008)- Use statistical data to determine value for local variable in query optimization&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Links : &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/sqlprogrammability/archive/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature.aspx" target="_blank"&gt;OPTIMIZE FOR UNKNOWN – a little known SQL Server 2008 feature&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.benjaminnevarez.com/2010/06/how-optimize-for-unknown-works/" target="_blank"&gt;How OPTIMIZE FOR UNKNOWN Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/ms181714.aspx" target="_blank"&gt;Query Hints&lt;/a&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/qLxibCLDWQE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/1936056846396796292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=1936056846396796292&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1936056846396796292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1936056846396796292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/qLxibCLDWQE/optimize-for-unknown-and-other-query.html" title="OPTIMIZE FOR UNKNOWN and other query hints" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/optimize-for-unknown-and-other-query.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQnY8eyp7ImA9WhBXFk0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-7686938230193217491</id><published>2013-02-05T00:05:00.000Z</published><updated>2013-03-30T00:15:23.873Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-30T00:15:23.873Z</app:edited><title>Revision : Transfer a table to another schema</title><content type="html">Created a table in the wrong schema?&lt;br /&gt;
Easily done. Easy to drop and recreate, but what if you've populated it?&lt;br /&gt;
&lt;br /&gt;
Here's how to transfer a table to a different schema.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;ALTER SCHEMA TargetSchema
TRANSFER dbo.myTable
&lt;/pre&gt;

Covered this back in 2007 too - &lt;a href="http://sqlsolace.blogspot.co.uk/2007/10/sql-2005-moving-objects-between-schemas.html"&gt;Solace : Moving Tables Between Schemas&lt;/a&gt;
&lt;br /&gt;
and 2009 - &lt;a href="http://sqlsolace.blogspot.co.uk/2009/07/changing-table-schema.html"&gt;Solace : Changing Table Schema&lt;/a&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/TEDvgDea-RQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/7686938230193217491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=7686938230193217491&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/7686938230193217491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/7686938230193217491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/TEDvgDea-RQ/revision-transfer-table-to-another.html" title="Revision : Transfer a table to another schema" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/revision-transfer-table-to-another.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDQX4-fSp7ImA9WhBXFk0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-8594114208434961081</id><published>2013-02-04T23:51:00.000Z</published><updated>2013-03-29T23:59:30.055Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-29T23:59:30.055Z</app:edited><title>Column Level Encryption Walkthrough</title><content type="html">Here is a quick script to demonstrate reversible encryption.&lt;br /&gt; &lt;br /&gt;
First, some configuration -&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Setup a master key&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Create a Certificate&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Create a Symmetric key

&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="sql" name="code"&gt;CREATE MASTER KEY ENCRYPTION BY 
PASSWORD = 'ins3cur3-p4ss'
GO

CREATE CERTIFICATE Certificate1
   WITH SUBJECT = 'AES Encryption';
GO
 
CREATE SYMMETRIC KEY Key1
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE Certificate1;
GO
&lt;/pre&gt;
&lt;br /&gt;
Next create the test environment by&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Creating a table&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Inserting Data&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Showing the results

&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="sql" name="code"&gt;CREATE TABLE EncryptionTest
 (ID INT IDENTITY(1,1)
 ,email VARCHAR(100) NOT NULL 
 ,passwordplain NVARCHAR(16) NOT NULL
 ,passwordencrypt VARBINARY(256) NULL
 )
GO

INSERT INTO EncryptionTest (email,passwordplain) VALUES ('someone@someplace.com', 'simplepass')
GO

SELECT * FROM EncryptionTest 
&lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;ID email     passwordplain passwordencrypt&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;1 someone@someplace.com simplepass  NULL&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Now populate the passwordencrypt function using the EncryptByKey function.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;OPEN SYMMETRIC KEY Key1
DECRYPTION BY CERTIFICATE Certificate1;

UPDATE EncryptionTest
SET passwordencrypt = EncryptByKey(Key_GUID('Key1'), passwordplain);

CLOSE SYMMETRIC KEY Key1;

SELECT * FROM EncryptionTest 
&lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;ID email     passwordplain passwordencrypt&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;1 someone@someplace.com simplepass  0x00543AEC5035FA48BE3115FF0E14A3320100000093F2435E1F1DC8ACCC03097E6AD5D1262C4F2FF1ADE341D38207035E1FCD1B2A82123F5DCBDA3414BC3490593924B830&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Finally, prove we can decrypt the password again.

&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;OPEN SYMMETRIC KEY Key1
DECRYPTION BY CERTIFICATE Certificate1;

SELECT ID, email, passwordencrypt, CONVERT(NVARCHAR(16), DecryptByKey(passwordencrypt)) 
AS [DecryptedPassword]
FROM EncryptionTest

CLOSE SYMMETRIC KEY Key1;
&lt;/pre&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: blue;"&gt;ID email passwordencrypt DecryptedPassword
1 someone@someplace.com 0x00543AEC5035FA48BE3115FF0E14A3320100000093F2435E1F1DC8ACCC03097E6AD5D1262C4F2FF1ADE341D38207035E1FCD1B2A82123F5DCBDA3414BC3490593924B830 simplepass

&lt;/span&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/4nf05OYCY_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/8594114208434961081/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=8594114208434961081&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8594114208434961081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8594114208434961081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/4nf05OYCY_o/column-level-encryption-walkthrough.html" title="Column Level Encryption Walkthrough" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/column-level-encryption-walkthrough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDQHoyfyp7ImA9WhBXFUQ.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-5759496375547932911</id><published>2013-02-03T22:00:00.000Z</published><updated>2013-03-29T22:04:31.497Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-29T22:04:31.497Z</app:edited><title>Revision : sp_refreshview </title><content type="html">For views that do not use WITH SCHEMABINDING, sp_refreshview should be run when the objects underlying the view are changed.&lt;br /&gt;
&lt;br /&gt;
Usage :&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;exec sp_refreshview 'dbo.myView'
&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms187821.aspx" target="_blank"&gt;MSDN : sp_refreshview&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/NuhZim2aPzk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/5759496375547932911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=5759496375547932911&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5759496375547932911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5759496375547932911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/NuhZim2aPzk/revision-sprefreshview.html" title="Revision : sp_refreshview " /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/revision-sprefreshview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQEQH84cCp7ImA9WhBXFUs.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-2294966806527880589</id><published>2013-02-02T19:31:00.000Z</published><updated>2013-03-29T13:38:21.138Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-29T13:38:21.138Z</app:edited><title>Revision : Log file control</title><content type="html">Got a Large Log File (LDF) ?&lt;br /&gt;
&lt;br /&gt;
Hopefully your maintenance plans have this all under control but on occasion there might be reason to manually intervene , e,g an unexpected growth in the database or a failure of a FULL backup.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Back it up&lt;/li&gt;
&lt;li&gt;Attempt to shrink it&lt;/li&gt;
&lt;/ol&gt;
For example :&lt;br /&gt;
&lt;br /&gt;


&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;USE db;
BACKUP LOG db TO db_log_backup;
DBCC SHRINKFILE (db_log);
&lt;/pre&gt;
&lt;br /&gt;
Hopefully the system isn't so busy that the log gets written to between the BACKUP and SHRINKFILE commands.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;NB: Prior to SQL 2008 you could reduce with the tranaction log with &lt;br /&gt;BACKUP LOG db WITH TRUNCATE_ONLY&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;
Others may advocate changing the recovery model to SIMPLE (the transaction log truncted on checkpoint) but this will break the backup chain and you will have to perform a FULL backup again when you return it to the FULL recovery mode.&lt;br /&gt;
&lt;br /&gt;
DBCC SHRINKFILE Gotchas -&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;TRUNCATEONLY &lt;/b&gt;- Removes free space at end of data file&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;NOTRUNCATE &lt;/b&gt;- Moves data within data file, frees pages at end. Does not shrink data file itself.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;NB: TRUNCATEONLY &amp;amp; NOTRUNCATE Only work on data files. &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Your success in shrinking log files relies on logs being written to the front portion of the log file immediately after a backup (and the rate at which that occurs).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us//library/ms189493.aspx" target="_blank"&gt;DBCC SHRINKFILE&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-gb/library/ms189573.aspx" target="_blank"&gt;Database Checkpoints&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.sqlmag.com/article/internals-and-architecture/what-happens-to-your-transaction-log-in-simple-recovery-model--102835" target="_blank"&gt;What Happens to Your Transaction Log in SIMPLE Recovery Model?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/IMwGJMMMbwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/2294966806527880589/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=2294966806527880589&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2294966806527880589?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2294966806527880589?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/IMwGJMMMbwQ/revision-log-file-control.html" title="Revision : Log file control" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/revision-log-file-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EASX08cCp7ImA9WhBXFUg.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-155100045926068177</id><published>2013-02-01T19:05:00.000Z</published><updated>2013-03-29T12:20:48.378Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-29T12:20:48.378Z</app:edited><title>SQL 2012 : SEQUENCE Walkthrough </title><content type="html">SQL 2012 introduces a SEQUENCE (apparently Oracle has had this for a while).&lt;br /&gt;
You create a SEQUENCE like this -&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;CREATE SEQUENCE [TestSequence]
AS [INT]
START WITH 1
INCREMENT BY 1
MAXVALUE 3
GO
&lt;/pre&gt;
&lt;br /&gt;
Retrieving values from the sequence works like this -&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT NEXT VALUE FOR [TestSequence]
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;First Run : 1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Second Run : 2&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Third Run : 3&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The Forth Run produces the following error, as the sequence had reached it's maximum value of 3 -&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: red;"&gt;&lt;i&gt;Msg 11728, Level 16, State 1, Line 1
The sequence object 'TestSequence' has reached its minimum or maximum value. Restart the sequence object to allow new values to be generated.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
By default, a sequence does not repeat itself.&lt;br /&gt;
You could restart the sequence...&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;ALTER SEQUENCE [TestSequence] RESTART
&lt;/pre&gt;
&lt;br /&gt;
Or add the keyword CYCLE to the original statement...&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;DROP SEQUENCE [TestSequence]
GO

CREATE SEQUENCE [TestSequence]
AS [INT]
START WITH 1
INCREMENT BY 1
MAXVALUE 3
CYCLE
GO
&lt;/pre&gt;
&lt;br /&gt;
Having done so, we'll run the statement again -&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT NEXT VALUE FOR [TestSequence]
GO
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;First Run : 1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Second Run : 2&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Third Run : 3&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Forth Run : -2147483648&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Fifth Run : -2147483647&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Sixth Run : -2147483646

&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So without specifying a minimum value, the SEQUENCE uses the minimum value for the INT data type and continues cycling from there.&lt;br /&gt;
&lt;br /&gt;
Let's try again.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;
DROP SEQUENCE [TestSequenceCycle]
GO

CREATE SEQUENCE [TestSequenceCycle]
AS [INT]
START WITH 1
INCREMENT BY 1
MAXVALUE 3
MINVALUE 1
CYCLE
GO
&lt;/pre&gt;
&lt;pre class="sql" name="code"&gt;SELECT NEXT VALUE FOR [TestSequenceCycle]
GO
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;First Run : 1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Second Run : 2&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Third Run : 3&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Forth Run : 1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Fifth Run : 2&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Sixth Run : 3&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The most obvious use for the sequence is populating several child tables with a key value from a parent. This saves us looking up an inserted IDENTITY value.

&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/mEVVZllm7cE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/155100045926068177/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=155100045926068177&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/155100045926068177?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/155100045926068177?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/mEVVZllm7cE/sql-2012-sequence-walkthrough.html" title="SQL 2012 : SEQUENCE Walkthrough " /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/02/sql-2012-sequence-walkthrough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCSXc-cCp7ImA9WhBXFUg.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-434437123689436761</id><published>2013-01-31T22:49:00.000Z</published><updated>2013-03-29T11:07:48.958Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-29T11:07:48.958Z</app:edited><title>ROWVERSION Walkthrough</title><content type="html">ROWVERSION is used for versioning rows (did the name not give it away?)&lt;br /&gt;
&lt;br /&gt;
Equivalent to VARBINARY(8), here is a demonstration of how it works (using the bestselling albums of 1983!)&lt;br /&gt;
First we create a table with a ROWVERSION column and populate it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;CREATE TABLE TopAlbums
( ID INT IDENTITY(1,1)
 ,Artist NVARCHAR(50)
 ,Title NVARCHAR(50)
 ,Version ROWVERSION)

GO

INSERT INTO TopAlbums (Artist,Title) VALUES ('Michael Jackson','Thriller')
INSERT INTO TopAlbums (Artist,Title) VALUES ('David Bowie','Let''s Dance')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Culture Club','Colour By Numbers')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Paul Young','No Parlez')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Spandau Ballet','1')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Wham!','Fantastic')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Men At Work','Business As Usual')
INSERT INTO TopAlbums (Artist,Title) VALUES ('The Police','Synchronicity')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Genesis','Genesis')
INSERT INTO TopAlbums (Artist,Title) VALUES ('Eurythmics','Sweet Dreams')

GO
&lt;/pre&gt;
Here we can see the value of the Version column that ROWVERSION has created.



&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT * FROM TopAlbums WHERE ID = 10
&lt;/pre&gt;
&lt;span style="color: blue;"&gt;10 Eurythmics Sweet Dreams &lt;span style="color: red;"&gt;0x00000000000007F8&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now we give album 10, it's full title -&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;UPDATE TopAlbums  
SET Title = Title + ' (Are Made Of This)'
WHERE ID = 10
&lt;/pre&gt;
and we can see that the amendment has updated the Version column.


&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT * FROM TopAlbums WHERE ID = 10
&lt;/pre&gt;
&lt;span style="color: blue;"&gt;10 Eurythmics Sweet Dreams (Are Made Of This) &lt;span style="color: red;"&gt;0x00000000000007F9&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Practical uses of this are data warehousing systems, i.e. only reloading data that has changed.
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/7dHlOWEBzv0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/434437123689436761/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=434437123689436761&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/434437123689436761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/434437123689436761?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/7dHlOWEBzv0/rowversion-walkthrough.html" title="ROWVERSION Walkthrough" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/rowversion-walkthrough.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EFQnc_cCp7ImA9WhBXE0o.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-8575858549646697200</id><published>2013-01-30T20:15:00.000Z</published><updated>2013-03-27T10:20:13.948Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-27T10:20:13.948Z</app:edited><title>Policy Based Management Basics</title><content type="html">Introduced in SQL 2008 , PBM allows you to standardise your SQL servers.&lt;br /&gt;&lt;br /&gt;PBM is found under Management \ Policy Management in SQL Management Studio,&lt;br /&gt;PBM relies on Facets (which in turn have properties), Conditions &amp;amp; Policies.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Facets&lt;/b&gt;These are the area of SQL we wish to control; e.g. 'Log File'&lt;br /&gt;(There are lots of these, even more in SQL 2012).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Properties&lt;/b&gt;The 'Log File' Facet has 15 properties, 'Growth' being a potentially important one.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conditions&lt;/b&gt;The condition compares the Facet and it's property. For example we might want Log file Growth to always be set to 10%.&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;Policies&lt;/b&gt;The policy itself defines the target servers and the evaluation modes.&lt;br /&gt;&lt;br /&gt;Evaluation Modes are&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;On Demand&lt;/li&gt;
&lt;li&gt;On Schedule&lt;/li&gt;
&lt;li&gt;On Change Prevent&lt;/li&gt;
&lt;li&gt;On Change Log Only&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;So to sum up, to implement a policy -&lt;br /&gt;
&lt;br /&gt;
1. Create condition based on a facet&lt;br /&gt;
&lt;br /&gt;
2. Create a policy&lt;br /&gt;
&lt;ol&gt;&lt;ol&gt;
&lt;li&gt;Based on the named condition &lt;/li&gt;
&lt;li&gt;Set the evaluation mode &lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
3. Enable the Policy&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.simple-talk.com/sql/database-administration/policy-based-management/" target="_blank"&gt;Simple Talk : Introduction to Policy Based Management&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/rYHJUGNOXXw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/8575858549646697200/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=8575858549646697200&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8575858549646697200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/8575858549646697200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/rYHJUGNOXXw/policy-based-management-basics.html" title="Policy Based Management Basics" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/policy-based-management-basics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4CSHcyeCp7ImA9WhBQGU0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-1489470967455367083</id><published>2013-01-29T23:19:00.000Z</published><updated>2013-03-21T23:19:29.990Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T23:19:29.990Z</app:edited><title>Revision : I/O Affinity Mask</title><content type="html">I/O Affinity is a server option typically for datawarehouse implementations.&lt;br /&gt;
It helps when a system is reading &amp;amp; writing large amounts of data.&lt;br /&gt;
&lt;br /&gt;
Solace : &lt;a href="http://sqlsolace.blogspot.co.uk/2009/07/affinity-affinity-io-some-notes.html" target="_blank"&gt;Affinity &amp;amp; Affinity I/O&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/yB2xfbTNGi4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/1489470967455367083/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=1489470967455367083&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1489470967455367083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1489470967455367083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/yB2xfbTNGi4/revision-io-affinity-mask.html" title="Revision : I/O Affinity Mask" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/revision-io-affinity-mask.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHQHo7fip7ImA9WhBQGU0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-5945845141983495208</id><published>2013-01-28T23:04:00.000Z</published><updated>2013-03-21T23:05:31.406Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T23:05:31.406Z</app:edited><title>Minimal Configuration &amp; Single User Modes</title><content type="html">In the event of a server failure, you might need to start SQL Server in either the Minimal Configuration or Single User Mode.&lt;br /&gt;&lt;br /&gt;They both &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Only allow 1 user to connect&lt;/li&gt;
&lt;li&gt;Disable the CHECKPOINT process&lt;/li&gt;
&lt;/ul&gt;
Minimal Configuration Mode also prevents startup procedures from being run however.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-US/library/ms188236(v=sql.90).aspx" target="_blank"&gt;Starting SQL Server in Single-User Mode&lt;/a&gt; (Startup option -m)&lt;a href="http://msdn.microsoft.com/en-US/library/ms186400%28v=sql.90%29.aspx" target="_blank"&gt;&lt;br /&gt;Starting SQL Server with Minimal Configuration&lt;/a&gt; (Startup option -f)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/GXcUMAv4DLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/5945845141983495208/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=5945845141983495208&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5945845141983495208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/5945845141983495208?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/GXcUMAv4DLs/minimal-configuration-single-user-modes.html" title="Minimal Configuration &amp; Single User Modes" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/minimal-configuration-single-user-modes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIDQ3w_fyp7ImA9WhBQGU0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-1965365832443008099</id><published>2013-01-27T22:41:00.000Z</published><updated>2013-03-21T22:56:12.247Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T22:56:12.247Z</app:edited><title>Revision : Backups </title><content type="html">&lt;b&gt;Recovery Models&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
FULL Recovery Models&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Supports FULL , DIFF &amp;amp; LOG backups&lt;/li&gt;
&lt;li&gt;The only mode that supports PAGE restores - &lt;a href="http://msdn.microsoft.com/en-us/library/ms189323%28v=sql.105%29.aspx" target="_blank"&gt;Page Restore requires FULL recovery model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
SIMPLE Recovery Models&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Supports FULL &amp;amp; DIFF backups&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Backup Options&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;COPY_ONLY&lt;/span&gt; Use this to take a copy of a production system for a development environment.&lt;br /&gt;
It won't mess up the backup chain.&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;br /&gt;CONTINUE_AFTER_ERROR&lt;/span&gt; - Does what it says!&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;BACKUP DATABASE database_name TO DISK='c:\database_name.BAK'
WITH CHECKSUM, CONTINUE_AFTER_ERROR;
&lt;/pre&gt;
&lt;br /&gt;
It can also be used on a restore (last resort)&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;RESTORE DATABASE database_name FROM backup_device
WITH CONTINUE_AFTER_ERROR;
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/S8Vpq_hzTBI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/1965365832443008099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=1965365832443008099&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1965365832443008099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1965365832443008099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/S8Vpq_hzTBI/revision-backups.html" title="Revision : Backups " /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/revision-backups.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EBQXYzeCp7ImA9WhBQGEQ.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-3644150049152236709</id><published>2013-01-26T20:16:00.000Z</published><updated>2013-03-21T19:54:10.880Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T19:54:10.880Z</app:edited><title>SQL 2012 : Enabling Filestream</title><content type="html">Filestream launched in SQL 2012 and introduces the concept of a FileTable.&lt;br /&gt;
This is a directory structure (folder) viewable from SQL.&lt;br /&gt;
&lt;br /&gt;
Here's a quick walkthrough to see Filestream in action.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1) Enable Filestream at the INSTANCE Level by -&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Launching SQL Server configuration manager&lt;br /&gt;
Navigate to the properies of the instance service and enable via the Filestream tab&lt;br /&gt;
Chose the appropriate options -&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Enable FILESTREAM for Transact-SQL access&lt;/li&gt;
&lt;li&gt;Enable FILESTREAM for file I/O streaming access (Also provide a share name)&lt;/li&gt;
&lt;li&gt;Allow remote clients to have streaming access to FILESTREAM data.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-XZokFB2iG1g/UUtlSoUJoQI/AAAAAAAAAzA/knSM5xlrdjo/s1600/enable_filestream.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-XZokFB2iG1g/UUtlSoUJoQI/AAAAAAAAAzA/knSM5xlrdjo/s400/enable_filestream.png" width="343" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
Launch a query window in Management Studio and run&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;EXEC sp_configure filestream_access_level, 2
RECONFIGURE
GO
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;2) Add a Filestream filegroup at the database level&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;ALTER DATABASE SandPit
ADD FILEGROUP fsTestFileGroup
CONTAINS FILESTREAM;
GO
&lt;/pre&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;3) Add a file to the filegroup&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;ALTER DATABASE SandPit
ADD FILE
(
NAME='fsTestFile',
FILENAME='C:\fsTestFile'
)
TO FILEGROUP fsTestFileGroup;
GO
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;4) Enable Filestream on the database&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;ALTER DATABASE SandPit
SET FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME ='fsTestFile')
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;5) Create a table&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;CREATE TABLE fsTestTable AS FILETABLE
WITH
(
FILETABLE_DIRECTORY ='fsTestFile',
FILETABLE_COLLATE_FILENAME = database_default
);
GO
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;6) Test !!!&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;SELECT * FROM fsTestTable;
&lt;/pre&gt;
&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/qsXSKhhOxlk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/3644150049152236709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=3644150049152236709&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3644150049152236709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3644150049152236709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/qsXSKhhOxlk/sql-2012-enabling-filestream.html" title="SQL 2012 : Enabling Filestream" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-XZokFB2iG1g/UUtlSoUJoQI/AAAAAAAAAzA/knSM5xlrdjo/s72-c/enable_filestream.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/sql-2012-enabling-filestream.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMRXs7fip7ImA9WhBQF00.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-2911007113667707901</id><published>2013-01-25T02:47:00.000Z</published><updated>2013-03-19T16:16:24.506Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-19T16:16:24.506Z</app:edited><title>Creating Views - WITH CHECK OPTION</title><content type="html">Something I hadn't appreciated today, the WITH CHECK OPTION when creating views.&lt;br /&gt;
&lt;br /&gt;
The WITH CHECK OPTION is implemented at the end of a view definition.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="sql" name="code"&gt;CREATE VIEW redCars AS
    (
        SELECT type, model, registration, colour
    FROM Vehicles
    WHERE type = 'Car'
    AND Colour = 'Red'
    )
    WITH CHECK OPTION
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
It ensures changes that would alter the returned rows cannot occur.&lt;br /&gt;
&lt;br /&gt;
UPDATE redCars SET Registration = 'ABC123' will therefore succeed.&lt;br /&gt;
UPDATE redcars SET Colour = 'Blue' will not&lt;br /&gt;
&lt;br /&gt;
Links :&lt;br /&gt;
&lt;a href="http://www.devx.com/vb2themax/Tip/18579" target="_blank"&gt;DevX.com - The WITH CHECK OPTION option with views&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/01/15/with-check-option-on-create-view-what-is-it-how-s-it-work-what-other-options-are-available-for-referntial-integrity-ri-part-1.aspx" target="_blank"&gt;Tony Rogerson - WITH CHECK on CREATE VIEW&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/0hQPjGbWByg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/2911007113667707901/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=2911007113667707901&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2911007113667707901?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/2911007113667707901?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/0hQPjGbWByg/creating-views-with-check-option.html" title="Creating Views - WITH CHECK OPTION" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/creating-views-with-check-option.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMSHo5eip7ImA9WhBQF00.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-1652088456368395183</id><published>2013-01-24T18:22:00.000Z</published><updated>2013-03-19T15:26:29.422Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-19T15:26:29.422Z</app:edited><title>Revision :Schemabinding</title><content type="html">Schemabinding can be specified on VIEWS and UDFs (user defined functions).&lt;br /&gt;
&lt;br /&gt;
For example ;&lt;br /&gt;
&lt;pre class="sql" name="code"&gt; 
CREATE VIEW [dbo].[vw_myView] WITH SCHEMABINDING AS
SELECT columnlist
FROM dbo.table
GO
&lt;/pre&gt;
&lt;br /&gt;
Creating an object with SCHEMABINDING prevents the underlying structure of the tables being reference from being changed.&lt;br /&gt;
&lt;br /&gt;
It's advantage is the increased performance of objects that use it.&lt;br /&gt;
&lt;br /&gt;
It's disadvantage is maintainability in that it complicates scripting when underlying objects need to change i.e. the schema bound ones must first be removed.&lt;br /&gt;
&lt;br /&gt;
It is necessary in order to create INDEXED VIEWS in editions of SQL Server that support it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://sqlsolace.blogspot.co.uk/2009/06/bookmark-schemabinding.html" target="_blank"&gt;Solace : Schemabinding &amp;amp; UDFs&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/pl28-teCbqQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/1652088456368395183/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=1652088456368395183&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1652088456368395183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/1652088456368395183?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/pl28-teCbqQ/revision-schemabinding.html" title="Revision :Schemabinding" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/revision-schemabinding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EMRXg9fSp7ImA9WhBQGU0.&quot;"><id>tag:blogger.com,1999:blog-2453693540149032389.post-3596475105286602986</id><published>2013-01-23T19:06:00.000Z</published><updated>2013-03-21T22:41:24.665Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-21T22:41:24.665Z</app:edited><title>TSQL : Processes being blocked</title><content type="html">&lt;br /&gt;
How to determine the Processes being blocked via TSQL &lt;br /&gt;
&lt;br /&gt;
Old way : &lt;span style="color: blue;"&gt;exec sp_who 80&lt;/span&gt;&lt;br /&gt;
New way (sql 2005+): &lt;span style="color: blue;"&gt;SELECT * FROM sys.dm_exec_requests WHERE Session_id = 80&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
With &lt;a href="http://msdn.microsoft.com/en-us/library/ms174313.aspx" target="_blank"&gt;sp_who&lt;/a&gt; the column blk holds the session id of the blocking process.&lt;br /&gt;
&lt;br /&gt;
On the &lt;a href="http://msdn.microsoft.com/en-us/library/ms177648.aspx" target="_blank"&gt;sys.dm_exec_requests&lt;/a&gt; view there is the blocking_session_id column.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To stop a blocking process, use KILL spid e.g.&lt;span style="color: blue;"&gt; KILL 71&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Other uses of sys.dm_exec_requests -&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://sqlsolace.blogspot.co.uk/2010/07/long-running-queries.html" target="_blank"&gt;Solace : Long Running Queries&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sqlsolace.blogspot.com/2010/06/tsql-percentage-complete-of-running.html" target="_blank"&gt;Solace : % Percentage complete of running requests&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms177648.aspx" target="_blank"&gt;MSDN : sys.dm_exec_requests&lt;/a&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms174313.aspx" target="_blank"&gt;&lt;br /&gt;MSDN : sp_who&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlSolace/~4/FG21oNSK_jM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlsolace.blogspot.com/feeds/3596475105286602986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2453693540149032389&amp;postID=3596475105286602986&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3596475105286602986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2453693540149032389/posts/default/3596475105286602986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlSolace/~3/FG21oNSK_jM/tsql-processes-being-blocked.html" title="TSQL : Processes being blocked" /><author><name>r5d4</name><uri>http://www.blogger.com/profile/09999231147372917249</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="32" src="http://3.bp.blogspot.com/_rnmXZq5ccGo/TDGsyKZffxI/AAAAAAAAApU/vi8HhGcZ_5c/S220/r5d4-2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlsolace.blogspot.com/2013/01/tsql-processes-being-blocked.html</feedburner:origLink></entry></feed>
