<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;CEcNQ3s-fyp7ImA9WhdXE08.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414</id><updated>2011-08-25T22:28:12.557-03:00</updated><title>SQL Server by Martín Ghazarian</title><subtitle type='html'>Performance en Bases de Datos</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default?redirect=false&amp;v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry gd:etag='W/&quot;CEcNQ3syfCp7ImA9WhdXE08.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-1277845329141738546</id><published>2011-08-25T21:11:00.001-03:00</published><updated>2011-08-25T22:28:12.594-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-08-25T22:28:12.594-03:00</app:edited><title>Análisis de Performance en UDFs</title><content type='html'>El Cost UDF no es reflejado en las métricas de los costos por lo que es apropiado analizar&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;EXECUTION TIME&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mediante &lt;b&gt;SET STATISTICS TIME ON&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El problema principal del análisis erroneo de la performance en Stored Procedures que utilizan UDFs se basa en en que las UDFs no se incluyen en el costo estimado encontrado en el &lt;span style="color: #0c343d;"&gt;Execution Plan.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #0c343d;"&gt;De esta manera se concluye que las estimaciones I/O son erroneas para estos casos. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-1277845329141738546?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/1277845329141738546/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=1277845329141738546' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/1277845329141738546?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/1277845329141738546?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/08/analisis-de-performance-en-udfs.html' title='Análisis de Performance en UDFs'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUUNSXY8fSp7ImA9WhdXEk0.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-6945900847941408029</id><published>2011-08-24T14:34:00.000-03:00</published><updated>2011-08-24T14:34:58.875-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-08-24T14:34:58.875-03:00</app:edited><title>Query Performance</title><content type='html'>Metricas a considerar:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Query Cost&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Costo de CPU y I/O&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Page Reads&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Páginas leídas por SQL Server al ejecutar una query.&lt;br /&gt;
&lt;br /&gt;
SET STATISTICS IO ON&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Query Execution Time&lt;/b&gt;&lt;br /&gt;
Se ve afectada por el bloqueo (locks), así como la contención de recursos en el servidor&lt;br /&gt;
&lt;br /&gt;
SET STATISTICS TIME ON&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Execution Order (SIN UNION)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1 - FROM, JOIN, APPLY and ON&lt;br /&gt;
2 - WHERE&lt;br /&gt;
3 - GROUP BY (SUM, AVG, retc)&lt;br /&gt;
4 - HAVING&lt;br /&gt;
5 - SELECT&lt;br /&gt;
6 - ORDER BY&lt;br /&gt;
7 - TOP&lt;br /&gt;
8 - FOR XML&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Execution Order (CON UNION)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1 - FROM, JOIN, APPLY and ON&lt;br /&gt;
2 - WHERE&lt;br /&gt;
3 - GROUP BY (SUM, AVG, retc)&lt;br /&gt;
4 - HAVING&lt;br /&gt;
5 - TOP&lt;br /&gt;
6 - SELECT and UNION&lt;br /&gt;
7 - ORDER BY&lt;br /&gt;
8 - FOR XML&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-6945900847941408029?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/6945900847941408029/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=6945900847941408029' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6945900847941408029?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6945900847941408029?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/08/query-performance.html' title='Query Performance'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CEMBQXw8cSp7ImA9WhdXEk0.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-6312704682430712279</id><published>2011-08-24T13:14:00.000-03:00</published><updated>2011-08-24T13:14:10.279-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-08-24T13:14:10.279-03:00</app:edited><title>Manejo de Campos IDENTITY</title><content type='html'>&lt;br /&gt;
&lt;b&gt;@@IDENTITY&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para retornar el útlimo identity insertado (en cualquier tabla de la BD)&lt;br /&gt;
&lt;br /&gt;
SELECT @@IDENTITY;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SELECT SCOPE_IDENTITY();&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para retornar el útlimo identity insertado (en cualquier tabla de la BD, no incluye las ejecuciones de triggers)&lt;br /&gt;
&lt;br /&gt;
SELECT SCOPE_IDENTITY();&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;IDENT_CURRENT&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Retorna el último identity insertado en la tabla especificada&lt;br /&gt;
&lt;br /&gt;
SELECT IDENT_CURRENT('Table');&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-6312704682430712279?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/6312704682430712279/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=6312704682430712279' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6312704682430712279?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6312704682430712279?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/08/manejo-de-campos-identity.html' title='Manejo de Campos IDENTITY'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DEYAQHwyeCp7ImA9WhdQF0g.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-8270707210601794635</id><published>2011-08-19T09:13:00.000-03:00</published><updated>2011-08-19T09:15:41.290-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-08-19T09:15:41.290-03:00</app:edited><title>Herramienta DTCTester</title><content type='html'>&lt;span style="font-weight:bold;"&gt;DTCTester&lt;/span&gt; comprueba una transacción distribuida contra un Microsoft SQL Server especificado. Esta herramienta ayuda a probar las transacciones distribuidas a través de firewalls o contra redes. DTCTester lleva a cabo las transacciones distribuidas mediante API de ODBC en una base de datos de SQL Server. &lt;br /&gt;&lt;br /&gt;Descarga: &lt;a href="http://download.microsoft.com/download/b/8/8/b8841bfc-8bd3-4fea-a5f5-06e1f162bd9a/dtctest.exe"&gt;&lt;/a&gt;http://download.microsoft.com/download/b/8/8/b8841bfc-8bd3-4fea-a5f5-06e1f162bd9a/dtctest.exe&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-8270707210601794635?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/8270707210601794635/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=8270707210601794635' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/8270707210601794635?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/8270707210601794635?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/08/herramienta-dtctester.html' title='Herramienta DTCTester'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;Ck8MRncyeyp7ImA9WhdSGUg.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-7256257568999690381</id><published>2011-07-29T11:45:00.000-03:00</published><updated>2011-07-29T11:48:07.993-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-29T11:48:07.993-03:00</app:edited><title>XACT_STATE()</title><content type='html'>&lt;span style="font-weight:bold;"&gt;SELECT XACT_STATE()&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IF XACT_STATE() = 1 &lt;br /&gt; ROLLBACK;&lt;br /&gt;&lt;br /&gt;1 - TRANSACTION BEGIN&lt;br /&gt;0 - NO TRANSACTION&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-7256257568999690381?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/7256257568999690381/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=7256257568999690381' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/7256257568999690381?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/7256257568999690381?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/07/xactstate.html' title='XACT_STATE()'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;A0UCSH05fip7ImA9WhdSGUk.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-5928287044753690526</id><published>2011-07-29T11:20:00.000-03:00</published><updated>2011-07-29T11:21:09.326-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-29T11:21:09.326-03:00</app:edited><title>TRY CATCH</title><content type='html'>-- Verify that the stored procedure does not exist.&lt;br /&gt;IF OBJECT_ID ('usp_GetErrorInfo', 'P') IS NOT NULL&lt;br /&gt;    DROP PROCEDURE usp_GetErrorInfo;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;-- Create a procedure to retrieve error information.&lt;br /&gt;CREATE PROCEDURE usp_GetErrorInfo&lt;br /&gt;AS&lt;br /&gt;    SELECT &lt;br /&gt;        ERROR_NUMBER() AS ErrorNumber,&lt;br /&gt;        ERROR_SEVERITY() AS ErrorSeverity,&lt;br /&gt;        ERROR_STATE() as ErrorState,&lt;br /&gt;        ERROR_PROCEDURE() as ErrorProcedure,&lt;br /&gt;        ERROR_LINE() as ErrorLine,&lt;br /&gt;        ERROR_MESSAGE() as ErrorMessage;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;BEGIN TRY&lt;br /&gt;    -- Generate divide-by-zero error.&lt;br /&gt;    SELECT 1/0;&lt;br /&gt;END TRY&lt;br /&gt;BEGIN CATCH&lt;br /&gt;    -- Execute the error retrieval routine.&lt;br /&gt;    EXECUTE usp_GetErrorInfo;&lt;br /&gt;END CATCH;&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-5928287044753690526?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/5928287044753690526/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=5928287044753690526' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/5928287044753690526?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/5928287044753690526?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/07/try-catch.html' title='TRY CATCH'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CkAMQ3wycCp7ImA9WhdSF0Q.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-6915394005406628751</id><published>2011-07-27T15:16:00.000-03:00</published><updated>2011-07-27T15:19:42.298-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-27T15:19:42.298-03:00</app:edited><title></title><content type='html'>&lt;span style="font-weight:bold;"&gt;sp_spaceused 'Campaigns'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Name     rows  reserved    data    index_size         unused&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Campaigns   0     40 KB           16 KB   24 KB              0 KB&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-6915394005406628751?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/6915394005406628751/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=6915394005406628751' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6915394005406628751?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6915394005406628751?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/07/spspaceused-campaigns-name-rows.html' title=''/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;AkUBRXk-fCp7ImA9WhdSF0U.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-3689999004919987324</id><published>2011-07-27T14:33:00.001-03:00</published><updated>2011-07-27T14:37:34.754-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-27T14:37:34.754-03:00</app:edited><title>Sysobjects</title><content type='html'>--'sysobjects' tiene objectos (tablas, Stores, Funcions, etc)&lt;br /&gt;--'syscolumns' tiene objectos (tablas, Stores, Funcions, etc)&lt;br /&gt;&lt;br /&gt;SELECT SO.NAME, SC.NAME&lt;br /&gt;&lt;br /&gt;FROM sysobjects SO INNER JOIN syscolumns SC&lt;br /&gt;    ON SO.ID = SC.ID&lt;br /&gt;&lt;br /&gt;WHERE SO.XTYPE = N'U'&lt;br /&gt;&lt;br /&gt;ORDER BY SO.NAME, SC.NAME&lt;br /&gt;&lt;br /&gt;&lt;div class="caption"&gt;&lt;/div&gt;&lt;div class="tableSection"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;p&gt;Column name&lt;/p&gt;&lt;/th&gt;&lt;th&gt;&lt;p&gt;Data type&lt;/p&gt;&lt;/th&gt;&lt;th&gt;&lt;p&gt;Description&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;name&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;sysname&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Object name&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;id&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Object identification number&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;xtype&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;char(2)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Object type. Can be one of the following object types:&lt;/p&gt;&lt;p&gt;AF = Aggregate function (CLR)&lt;/p&gt;&lt;p&gt;C = CHECK constraint &lt;/p&gt;&lt;p&gt;D = Default or DEFAULT constraint &lt;/p&gt;&lt;p&gt;F = FOREIGN KEY constraint &lt;/p&gt;&lt;p&gt;L = Log &lt;/p&gt;&lt;p&gt;FN = Scalar function&lt;/p&gt;&lt;p&gt;FS = Assembly (CLR) scalar-function&lt;/p&gt;&lt;p&gt;FT = Assembly (CLR) table-valued function&lt;/p&gt;&lt;p&gt;IF = In-lined table-function &lt;/p&gt;&lt;p&gt;IT = Internal table&lt;/p&gt;&lt;p&gt;P = Stored procedure &lt;/p&gt;&lt;p&gt;PC = Assembly (CLR) stored-procedure&lt;/p&gt;&lt;p&gt;PK = PRIMARY KEY constraint (type is K) &lt;/p&gt;&lt;p&gt;RF = Replication filter stored procedure&lt;/p&gt;&lt;p&gt;S = System table &lt;/p&gt;&lt;p&gt;SN = Synonym&lt;/p&gt;&lt;p&gt;SQ = Service queue&lt;/p&gt;&lt;p&gt;TA = Assembly (CLR) DML trigger&lt;/p&gt;&lt;p&gt;TF = Table function &lt;/p&gt;&lt;p&gt;TR = SQL DML Trigger &lt;/p&gt;&lt;p&gt;TT = Table type&lt;/p&gt;&lt;p&gt;U = User table &lt;/p&gt;&lt;p&gt;UQ = UNIQUE constraint (type is K) &lt;/p&gt;&lt;p&gt;V = View &lt;/p&gt;&lt;p&gt;X = Extended stored procedure&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;uid&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Schema ID of the owner of the object.&lt;/p&gt;&lt;p&gt;For databases upgraded from an earlier version of SQL Server, the schema ID is equal to the user ID of the owner.&lt;/p&gt;&lt;div class="alert"&gt;&lt;div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="mtps-row"&gt;&lt;span class="mtps-th"&gt;&lt;img id="alert_caution" alt="Important note" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" title="Important note" xmlns="" class="cl_IC46226"&gt;&lt;strong&gt;Important&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="mtps-row"&gt;&lt;span class="mtps-cell"&gt;&lt;span&gt;If you use any of the following SQL Server DDL statements, you must use the &lt;a href="http://msdn.microsoft.com/en-us/library/ms190324.aspx"&gt;sys.objects&lt;/a&gt; catalog view instead of sys.sysobjects.&lt;/span&gt;&lt;span&gt;CREATE | ALTER | DROP USER&lt;/span&gt;&lt;span&gt;CREATE | ALTER | DROP ROLE&lt;/span&gt;&lt;span&gt;CREATE | ALTER | DROP APPLICATION ROLE&lt;/span&gt;&lt;span&gt;CREATE SCHEMA &lt;/span&gt;&lt;span&gt;ALTER AUTHORIZATION ON OBJECT&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Overflows or returns NULL if the number of users and roles exceeds 32,767. &lt;/p&gt;&lt;p&gt;For more information, see &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms189082.aspx"&gt;Querying the SQL Server System Catalog&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;info&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;status&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;base_schema_ver&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;replinfo&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;parent_obj&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Object identification number of the parent object. For example, the table ID if it is a trigger or constraint.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;crdate&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;datetime&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Date the object was created.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ftcatid&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identifier of the full-text catalog for all user tables registered for full-text indexing, and 0 for all user tables that are not registered. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;schema_ver&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Version number that is incremented every time the schema for a table changes. Always returns 0.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;stats_schema_ver&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;type&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;char(2)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Object type. Can be one of the following values: &lt;/p&gt;&lt;p&gt;AF = Aggregate function (CLR)&lt;/p&gt;&lt;p&gt;C = CHECK constraint&lt;/p&gt;&lt;p&gt;D = Default or DEFAULT constraint &lt;/p&gt;&lt;p&gt;F = FOREIGN KEY constraint&lt;/p&gt;&lt;p&gt;FN = Scalar function &lt;/p&gt;&lt;p&gt;FS = Assembly (CLR) scalar-function&lt;/p&gt;&lt;p&gt;FT = Assembly (CLR) table-valued functionIF = In-lined table-function &lt;/p&gt;&lt;p&gt;IT - Internal table&lt;/p&gt;&lt;p&gt;K = PRIMARY KEY or UNIQUE constraint&lt;/p&gt;&lt;p&gt;L = Log &lt;/p&gt;&lt;p&gt;P = Stored procedure&lt;/p&gt;&lt;p&gt;PC = Assembly (CLR) stored-procedure&lt;/p&gt;&lt;p&gt;R = Rule &lt;/p&gt;&lt;p&gt;RF = Replication filter stored procedure &lt;/p&gt;&lt;p&gt;S = System table&lt;/p&gt;&lt;p&gt;SN = Synonym&lt;/p&gt;&lt;p&gt;SQ = Service queue&lt;/p&gt;&lt;p&gt;TA = Assembly (CLR) DML trigger&lt;/p&gt;&lt;p&gt;TF = Table function &lt;/p&gt;&lt;p&gt;TR = SQL DML Trigger&lt;/p&gt;&lt;p&gt;TT = Table type&lt;/p&gt;&lt;p&gt;U = User table &lt;/p&gt;&lt;p&gt;V = View &lt;/p&gt;&lt;p&gt;X = Extended stored procedure&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;userstat&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;sysstat&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;indexdel&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;refdate&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;datetime&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;version&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;deltrig&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;instrig&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;updtrig&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;seltrig&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;category&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used for publication, constraints, and identity.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;cache&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;span class="input"&gt;smallint&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Identified for informational purposes only. Not supported. Future compatibility is not guaranteed.&lt;/p&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-3689999004919987324?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/3689999004919987324/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=3689999004919987324' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/3689999004919987324?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/3689999004919987324?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/07/sysobjects.html' title='Sysobjects'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUMBQHgyfSp7ImA9WhdSF08.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-2359383997668514904</id><published>2011-07-26T21:28:00.001-03:00</published><updated>2011-07-26T21:44:11.695-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-26T21:44:11.695-03:00</app:edited><title>Transacciones - ACID</title><content type='html'>En concreto ACID es un acrónimo de Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Atomicidad:&lt;/span&gt; es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Consistencia&lt;/span&gt;: es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aislamiento&lt;/span&gt;: es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información sean independientes y no generen ningún tipo de error.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Durabilidad&lt;/span&gt;: es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.&lt;br /&gt;Cumpliendo estas 4 condiciones o propiedades se considera ACID Compliant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IMPLICIT TRANSACTIONS: SET IMPLICIT_TRANSACTIONS ON&lt;br /&gt;&lt;br /&gt;EXPLICIT TRANSACTIONS: BEGIN TRANSACTION, COMMIT TRANSACTION and ROLLBACK TRANSACTION&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-2359383997668514904?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/2359383997668514904/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=2359383997668514904' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/2359383997668514904?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/2359383997668514904?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2011/07/transacciones-acid.html' title='Transacciones - ACID'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CE4FRX46fyp7ImA9Wx5XFUo.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-8067517361778104596</id><published>2010-09-15T14:48:00.001-03:00</published><updated>2010-09-15T14:48:34.017-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-09-15T14:48:34.017-03:00</app:edited><title>Novedades de SQL SERVER 2008</title><content type='html'>&lt;div class="clsIntro"&gt;Una vez más, Microsoft ha lanzado una nueva versión de SQL Server que promete facilitar el trabajo de los administradores de bases de datos. La última versión es SQL Server 2008 y ofrece una gran variedad de características &lt;/div&gt;                                         &lt;div class="clsNoIndent"&gt;y funcionalidad nuevas que mejorarán en gran medida la administración.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Los administradores de bases de datos que hayan usado SQL Server&lt;span class="superscript"&gt;®&lt;/span&gt; 2005, durante el tiempo que sea, encontrarán muchas de las mismas características que usan en su trabajo diario y también descubrirán en poco tiempo que SQL Server 2008 ha mejorado estás herramientas. La nueva funcionalidad basada en las características existentes contribuye en gran medida a reducir el número de soluciones alternativas y personalizaciones que eran necesarias para usar diferentes características en entornos de base de datos complejos.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Las nuevas características de SQL Server 2008 suponen una amplia gama de funciones de trabajos de bases de datos, lo que dificulta la tarea de categorizarlas. A medida que clasifico las características en diferentes temas, me doy cuenta de que algunos lectores se preguntarán por qué he situado la función X en la categoría Y si, claramente, pertenece a la categoría Z. Es una cuestión de perspectiva y está afectada por el modo de trabajar su empresa.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Comprendo que quien trabaja con bases de datos a menudo acaba desempeñando muchas funciones distintas, pero intentaré desglosar las nuevas funciones para que encajen en las siguientes categorías genéricas: administración, escalabilidad, rendimiento, alta disponibilidad, seguridad, desarrollo e inteligencia empresarial.&lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s1"&gt;Novedades de la administración&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Para los administradores de bases de datos (como yo), la funcionalidad de administración adicional hace de SQL Server 2008 un producto nuevo y muy interesante. La nueva administración de directivas, la capacidad de realizar consultas en varios servidores, los servidores de configuración y el almacén de recopilación y de administración de datos ofrecen capacidades nuevas y eficaces para los administradores de bases de datos que, a menudo, son los responsables de la administración de entornos de base de datos grandes y complejos que cuentan con cientos o miles de bases de datos o, incluso, cientos de servidores.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;La característica de administración de directivas de SQL Server 2008, que en las CTP se llamó Declarative Management Framework, le permite crear y ejecutar las directivas de configuración en uno o más servidores de bases de datos. Gracias a estas directivas, puede asegurarse de que se aplican y se mantienen los valores de configuración estándares en cada uno de los servidores y de las bases de datos de destino. Puede ver un ejemplo de esta característica en la &lt;strong&gt;Figura 1&lt;/strong&gt;.&lt;/div&gt;                                         &lt;div class="ArticleImageSpacer"&gt;                                                   &lt;img style="cursor: pointer;" alt="" src="http://i.technet.microsoft.com/cc434690.fig01%28es-es%29.gif" /&gt;                                                   &lt;div class="ArticleImageCaptionText"&gt;Figura 1&lt;strong&gt; Directiva de procedimientos recomendados de ubicación de archivos de datos y de registro &lt;/strong&gt;(Hacer clic en la imagen para ampliarla)&lt;/div&gt;                                         &lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Las directivas se crean a partir de un conjunto predeterminado de facetas. Cada faceta contiene un subgrupo de los valores de configuración de SQL Server 2008 y de otros eventos que puede controlar. Puede emparejar estas facetas con condiciones para crear una directiva. Las condiciones son los valores permitidos para las propiedades de una faceta, los valores de configuración u otros eventos contenidos en dicha faceta.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Las condiciones también son valores usados para los filtros de directiva. Supongamos que desea que se ejecute la directiva sólo en una base de datos determinada. En este caso, puede crear una condición que contenga el nombre de la base de datos y agregar a continuación dicha condición a la directiva. A partir de entonces, la directiva sólo se aplicará en esa base de datos. Le puedo asegurar que aunque la característica de administración de directivas de SQL Server 2008 pueda parecer complicada, una vez que la pruebe, se dará cuenta de que es muy intuitiva.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Las nuevas capacidades de interacción de varios servidores y de servidores de configuración son muy útiles cuando es necesario ejecutar consultas en varios servidores al mismo tiempo. Puede registrar servidores en Management Studio y reunir dichos servidores en una agrupación. Cuando necesite ejecutar una directiva o una consulta en todos los servidores de la agrupación, sólo tiene que hacer clic con el botón secundario en la agrupación y llevarla a cabo.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Como ventaja añadida, puede configurar esta característica para que devuelva un conjunto de resultados por servidor o unir todos los conjuntos de resultados en uno solo de gran tamaño. Además, puede especificar si desea que el servidor y los nombres de las bases de datos formen parte de los resultados, lo que le permite separar los resultados individuales de cada servidor. Tener la capacidad de almacenar los servidores registrados en el servidor de configuración en lugar de en cada Management Studio es una gran ventaja.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Otra característica interesante de administración que se ha incluido es el recopilador de datos. Los administradores de bases de datos suelen necesitar recopilar información de administración de un gran número de servidores. Para poder hacerlo, la mayoría de los administradores han creado su propia solución personalizada. El recopilador de datos es un mecanismo integrado que facilita la tarea de recopilar datos relacionados con la administración. Le permite usar el Agente SQL Server y SQL Server Integration Services (SSIS) para crear un marco que recopile y almacene su información a la vez que ofrece control de errores, auditoría e historiales de recopilación.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;A diferencia de lo que ocurre con los trabajos personalizados y las herramientas de terceros, la mayor parte de los administradores de bases de datos puede entender el recopilador de datos fácilmente, ya que usa el Agente SQL Server y SSIS para crear un conjunto de trabajos y de paquetes para controlar las conexiones, la recopilación y el almacenamiento de datos (como puede ver en la &lt;strong&gt;Figura 2&lt;/strong&gt;). Una vez que almacena esta información en una ubicación central, a la que se hace referencia como Almacén de administración, tiene la posibilidad de verla y de organizarla mediante un conjunto de instrucciones de T-SQL y de informes de SQL Server 2008 Reporting Services. Este almacén de datos central facilita en gran medida el análisis y la vista de las métricas de administración generales del entorno de base de datos.&lt;/div&gt;                                         &lt;div class="ArticleImageSpacer"&gt;                                                   &lt;img style="cursor: pointer;" alt="" src="http://i.technet.microsoft.com/cc434690.fig02%28es-es%29.gif" /&gt;                                                   &lt;div class="ArticleImageCaptionText"&gt;Figura 2&lt;strong&gt; Archivo de registro de uso de disco del colector de datos &lt;/strong&gt;(Hacer clic en la imagen para ampliarla)&lt;/div&gt;                                         &lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s2"&gt;Novedades de escalabilidad&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;A lo largo de los años, los administradores de bases de datos de SQL Server han observado que sus entornos de base de datos son cada vez más grandes. A medida que el entorno de base de datos crece, se necesitan nuevos métodos y herramientas para conseguir la escalabilidad que la mayoría de las empresas necesita. SQL Server 2008 ha introducido varias características nuevas que le serán de ayuda&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 dispone de compresión integrada que le permite comprimir las bases de datos y los archivos de registro de transacciones asociados con la base de datos comprimida. SQL Server 2005 introdujo la capacidad de comprimir datos en un archivo o grupo de archivos de sólo de lectura, pero esta forma de compresión sólo usaba la capacidad de compresión de NTFS de Windows&lt;span class="superscript"&gt;®&lt;/span&gt;. Con SQL Server 2008, ahora dispone tanto de compresión a nivel de fila como a nivel de página, lo que ofrece ventajas que no puede conseguir con la compresión a nivel de archivos de datos.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;La compresión a niveles de fila y de página reduce la cantidad de espacio de datos que necesita y, además, reduce la cantidad de memoria necesaria, ya que los datos permanecen comprimidos mientras que están en la memoria. Los datos comprimidos en la memoria dan como resultado una mayor utilización de la memoria, lo que beneficia a la escalabilidad de muchos sistemas.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 también introduce compresión a nivel de copias de seguridad. Mientras que las copias de seguridad de las bases de datos sólo realizan copias de seguridad de la parte activa de la base de datos, esto supone de todos modos cientos de gigabytes o, incluso, docenas de terabytes. En los entornos de base de datos que tienen más de una copia de un archivo de copia de seguridad de varios terabytes, estas copias a menudo ocupan un espacio de almacenamiento de gran valor que se podría usar de forma más eficaz. Al permitir a los administradores de bases de datos que compriman sus archivos de copia de seguridad, SQL Server 2008 libera parte de este espacio, de manera que se puede usar para datos activos.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;También cabe destacar el regulador de recursos. Esta nueva característica le permite definir la cantidad de recursos que las cargas de trabajo individuales o las agrupaciones de las mismas pueden usar durante su ejecución. Con el regulador de recursos, puede crear un entorno en el que muchas cargas de trabajo diferentes coexisten en un sólo servidor sin que una o más de dichas cargas congestionen el servidor y se reduzca el rendimiento de las otras cargas de trabajo.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;La ventaja de esta característica es que puede usar de forma más eficaz la cantidad total de recursos disponibles en sus servidores de bases de datos. En la &lt;strong&gt;Figura 3&lt;/strong&gt; se muestra un ejemplo del uso del regulador de recursos para limitar la actividad en un servidor.&lt;/div&gt;                                         &lt;div class="figmargin"&gt;                                                   &lt;span&gt; &lt;div class="MTPS_CollapsibleRegion"&gt; &lt;div class="CollapseRegionLink"&gt;  &lt;img class="LibC_o" src="http://i.msdn.microsoft.com/Global/Images/clear.gif" style="border-width: 0px; vertical-align: middle;" /&gt;  Figure 3 Limite la actividad con el regulador de recursos &lt;/div&gt; &lt;div class="MTPS_CollapsibleSection" style="display: block;"&gt;                                                                &lt;span id="ctl00_MTContentSelector1_mainContentContainer_ctl09_ctl00_ctl00"&gt; &lt;div class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl09_ctl00_ctl00_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl09_ctl00_ctl00_code"&gt;USE master&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;--Drop function&lt;br /&gt;IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL&lt;br /&gt;DROP FUNCTION rgclassifier_demo&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;--Create a classifier function for report group&lt;br /&gt;CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME&lt;br /&gt;WITH SCHEMABINDING&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;   DECLARE @group_name AS SYSNAME&lt;br /&gt; IF (USER_NAME() LIKE '%Launch_Demo%')&lt;br /&gt;        SET @group_name = 'demogroup'&lt;br /&gt;   RETURN @group_name&lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Drop workload group for anything coming from Management Studio&lt;br /&gt;IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups&lt;br /&gt; WHERE name = 'demogroup')&lt;br /&gt;BEGIN&lt;br /&gt; DROP WORKLOAD GROUP demogroup&lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create workload group&lt;br /&gt;CREATE WORKLOAD GROUP demogroup&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Register the classifier function with&lt;br /&gt;--Resource Governor&lt;br /&gt;ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Alter the dbogroup workload group to only&lt;br /&gt;--allow 10% of CPU for each workload request&lt;br /&gt;ALTER WORKLOAD GROUP demogroup&lt;br /&gt;WITH (REQUEST_MAX_CPU_TIME_SEC = 10)&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create a new resource pool and set a maximum CPU limit for all workloads.&lt;br /&gt;IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools&lt;br /&gt; WHERE name = 'pooldemo')&lt;br /&gt;DROP RESOURCE POOL pooldemo&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE RESOURCE POOL pooldemo&lt;br /&gt;WITH (MAX_CPU_PERCENT = 40)&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Configure the workload group so it uses the&lt;br /&gt;--new resource pool.&lt;br /&gt;ALTER WORKLOAD GROUP demogroup&lt;br /&gt;USING pooldemo&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Apply the changes to the Resource Governor&lt;br /&gt;--in-memory configuration.&lt;br /&gt;ALTER RESOURCE GOVERNOR RECONFIGURE&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;                                                    &lt;/div&gt; &lt;/div&gt; &lt;/span&gt;                                         &lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s3"&gt;Novedades del rendimiento&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;El rendimiento general de las bases de datos mejora con SQL Server 2008. Gracias a varias características nuevas de SQL Server 2008, puede controlar y supervisar el rendimiento de sus bases de datos y de las aplicaciones que se ejecutan en ellas.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Al realizar grandes cantidades de transacciones cada segundo, el bloqueo que generalmente se produce durante estas transacciones puede tener un impacto negativo en el rendimiento de sus aplicaciones de base de datos. SQL Server está diseñado para reducir el número total de bloqueos que produce un proceso al extender los bloqueos de los niveles de fila y de página a bloqueos más grandes de nivel de tabla. Es importante ser consciente de que esta extensión de bloqueos puede producir problemas. Por ejemplo, una única transacción puede bloquear una tabla entera y evitar que se ejecuten otras transacciones con esa tabla.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 funciona con el mecanismo de partición de tablas (que se introdujo en SQL Server 2005) para permitir al motor de SQL Server extender los bloqueos al nivel de partición antes que al nivel de tabla. Este nivel intermedio de bloqueo puede reducir radicalmente los efectos de la extensión de bloqueos en sistemas que tienen que procesar cientos y miles de transacciones por segundo.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 ofrece varias mejoras nuevas en el procesador de consultas para el momento en que la consulta interactúa con tablas con particiones. El optimizador de consultas puede realizar búsquedas de consultas en particiones de la misma forma que lo haría en índices individuales al trabajar sólo con el identificador de la partición y no con el mecanismo de partición a nivel de tabla.&lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s4"&gt;Novedades de la alta disponibilidad&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;A medida que los entornos de base de datos se vuelven más complejos y crece el tamaño de las bases de datos, cada vez es más difícil asegurar la disponibilidad de dichas bases de datos. Los mecanismos conocidos que ya ha usado en el pasado para obtener una alta disponibilidad siguen presentes en SQL Server 2008. Además, en SQL Server 2008 se han mejorado algunas características y se han añadido otras nuevas.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Con SQL Server 2005, muchos administradores comenzaron a implementar la creación de reflejos de bases de datos para obtener una alta disponibilidad. SQL Server 2008 proporciona muchas mejoras para la creación de reflejos de bases de datos. Por ejemplo, en el pasado, la creación de reflejos de bases de datos rara vez producía problemas de rendimiento relacionados con el movimiento de datos de registro de transacciones de la base de datos principal a las bases de datos reflejadas. Por eso, SQL Server 2008 reduce la cantidad de información que se mueve del registro de transacciones de la base de datos principal al registro de transacciones de la base de datos reflejada a través de la red mediante la compresión de la información antes de enviarla al registro de transacciones de la base de datos reflejada para conseguir una mayor solidez.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Ahora puede reparar páginas de datos corruptas en la base de datos principal. Si una base de datos principal tiene páginas de datos dañadas a causa de los errores 823 y 824, puede solicitar una copia nueva de dichas páginas de datos a los servidores reflejados. La solicitud de páginas de datos en buen estado es un proceso automatizado y transparente para cualquier usuario que acceda a las bases de datos principales en ese momento.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Otra característica nueva, Agregar CPU sin interrupción, le permite agregar CPU adicionales a un servidor de bases de datos sin afectar a la disponibilidad de las bases de datos que residen en ese servidor. No obstante, debe saber que Agregar CPU sin interrupción tiene algunas limitaciones, ya que sólo se puede usar en la versión de 64 bits basada en Itanium de Windows Server&lt;span class="superscript"&gt;®&lt;/span&gt; 2008 Enterprise Edition o Datacenter Edition, y necesita la versión Enterprise Edition de SQL Server 2008.&lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s5"&gt;Novedades de la seguridad&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2005 introdujo la seguridad de los datos en forma de cifrado de los mismos. Con SQL Server 2008, el cifrado se ha mejorado en gran medida con la introducción de dos características: Administración extensible de claves y Cifrado de datos transparente.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;La Administración extensible de claves permite obtener una estructura mejorada para almacenar de forma segura las claves que se han usado en la infraestructura de cifrado (no sólo en la base de datos en sí misma, también en módulos de software de terceras partes o con un módulo de seguridad de hardware fuera de la base de datos).&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;El Cifrado de datos transparente ofrece una flexibilidad mejorada para el cifrado de datos al permitir que el cifrado sea una propiedad de la base de datos y no sólo el resultado de las funciones de una línea de código. El resultado es que los administradores no tienen que realizar todos los cambios necesarios en la estructura de la base de datos y el código de aplicación al realizar el cifrado a nivel de datos. El código que aparece en la &lt;strong&gt;Figura 4&lt;/strong&gt; muestra cómo cifrar una base de datos mediante el Cifrado de datos transparente.&lt;/div&gt;                                         &lt;div class="figmargin"&gt;                                                   &lt;span&gt; &lt;div class="MTPS_CollapsibleRegion"&gt; &lt;div class="CollapseRegionLink"&gt;  &lt;img class="LibC_o" src="http://i.msdn.microsoft.com/Global/Images/clear.gif" style="border-width: 0px; vertical-align: middle;" /&gt;  Figure 4 Use el Cifrado de datos transparente &lt;/div&gt; &lt;div class="MTPS_CollapsibleSection" style="display: block;"&gt;                                                                &lt;span id="ctl00_MTContentSelector1_mainContentContainer_ctl10_ctl00_ctl00"&gt; &lt;div class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl10_ctl00_ctl00_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl10_ctl00_ctl00_code"&gt;USE master;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create a master key&lt;br /&gt;CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create a certificate to use with TDE&lt;br /&gt;CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Change to the database to encrypt&lt;br /&gt;USE AdventureWorks&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create your database master key&lt;br /&gt;CREATE DATABASE ENCRYPTION KEY&lt;br /&gt;WITH ALGORITHM = AES_128 --Use a strong algorithm&lt;br /&gt;ENCRYPTION BY SERVER CERTIFICATE TDECERT&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Alter the database to encrypt it with the&lt;br /&gt;--master database key&lt;br /&gt;ALTER DATABASE AdventureWorks&lt;br /&gt;SET ENCRYPTION ON&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;                                                    &lt;/div&gt; &lt;/div&gt; &lt;/span&gt;                                         &lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s6"&gt;Preparado especialmente para los desarrolladores&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Los administradores de bases de datos no son los únicos que se beneficiarán directamente de los cambios en SQL Server 2008. Hay un gran número de características nuevas que se han diseñado para ayudar a los desarrolladores de bases de datos. Entre estas características, podemos encontrar desde nuevas mejoras de T-SQL hasta nuevos componentes que pueden ayudar a los desarrolladores a crear y a usar consultas de bases de datos.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Muchos desarrolladores de bases de datos son los responsables de la creación de las consultas necesarias para devolver los datos necesarios para sus aplicaciones. Probablemente ya esté familiarizado con la herramienta LINQ (Language Integrated Query), que permite a los desarrolladores de bases de datos realizar consultas en una base de datos mediante un lenguaje de programación basado en Microsoft&lt;span class="superscript"&gt;®&lt;/span&gt; .NET en lugar de con instrucciones T-SQL. En realidad, SQL Server 2008 mejora el LINQ al ofrecer un nuevo proveedor de LINQ to SQL que permite a los desarrolladores ejecutar comandos LINQ directamente en las tablas y columnas de SQL Server. De esta manera se reducirá el tiempo necesario para crear nuevas consultas de datos.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Al desarrollar sobre bases de datos, los desarrolladores emplean objetos de alto nivel que asignan a las tablas y columnas individuales de las bases de datos. Estos objetos, también conocidos como entidades, representan los datos necesarios para las aplicaciones de bases de datos y, por lo tanto, el desarrollador no necesita entender la estructura de almacenamiento real de los datos ni el esquema de la base de datos. El nuevo ADO.NET Entity Framework permite a los desarrolladores crear bases de datos mediante estas entidades. A través de la abstracción de la estructura subyacente de la base de datos, los desarrolladores pueden conseguir una mayor productividad.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 ofrece muchas mejoras diferentes en T-SQL que permiten que los desarrolladores sean más eficaces. Un ejemplo de ellas es la nueva instrucción MERGE, que permite al desarrollador detectar la existencia de datos antes de intentar insertar datos nuevos. Al realizar esta comprobación antes de ejecutar la instrucción INSERT, se pueden actualizar los datos. Ya no es necesario crear uniones complejas para actualizar datos existentes y para insertar datos que aún no existen, todo con una única instrucción.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Además, se ha facilitado la separación de datos de tiempo y de datos de fecha del tipo de datos de fecha y hora. SQL Server 2008 introduce dos tipos de datos independientes para tratar los datos de fecha y de tiempo. Los diferentes tipos de datos se traducirán en un rendimiento mejorado para muchas consultas, debido a que ya no será necesario realizar una operación en los datos antes de poder usarlos en la consulta.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Al crear estructuras de bases de datos nuevas, los desarrolladores de bases de datos a menudo tienen que extender la estructura de las bases de datos para implementar aplicaciones de asignación. SQL Server 2008 ayuda a resolver este problema con nuevos tipos de datos de espacio. Los dos tipos de datos de espacio, GEOGRAPHY y GEOMETRY, permiten a los desarrolladores almacenar datos específicos de ubicación directamente en la base de datos sin tener que dividir esos elementos de datos en formatos que encajen con otros tipos de datos estándares. El código de la &lt;strong&gt;Figura 5&lt;/strong&gt; es un ejemplo de una tabla de espacio simple.&lt;/div&gt;                                         &lt;div class="figmargin"&gt;                                                   &lt;span&gt; &lt;div class="MTPS_CollapsibleRegion"&gt; &lt;div class="CollapseRegionLink"&gt;  &lt;img class="LibC_o" src="http://i.msdn.microsoft.com/Global/Images/clear.gif" style="border-width: 0px; vertical-align: middle;" /&gt;  Figure 5 Tabla de espacio simple &lt;/div&gt; &lt;div class="MTPS_CollapsibleSection" style="display: block;"&gt;                                                                &lt;span id="ctl00_MTContentSelector1_mainContentContainer_ctl11_ctl00_ctl00"&gt; &lt;div class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl11_ctl00_ctl00_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" id="ctl00_MTContentSelector1_mainContentContainer_ctl11_ctl00_ctl00_code"&gt;IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL&lt;br /&gt;   DROP TABLE Demo_SpatialTable&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Create table to hold spatial data&lt;br /&gt;CREATE TABLE Demo_SpatialTable&lt;br /&gt;   ( SpatialID int IDENTITY (1,1),&lt;br /&gt;   SpatialInputCol geography,&lt;br /&gt;   SpatialOutputCol AS SpatialInputCol.STAsText() )&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--Insert data into table&lt;br /&gt;INSERT INTO Demo_SpatialTable (SpatialInputCol)&lt;br /&gt;VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));&lt;br /&gt;&lt;br /&gt;INSERT INTO Demo_SpatialTable (SpatialInputCol)&lt;br /&gt;VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--View data to see that data has been converted and stored in col2&lt;br /&gt;SELECT * FROM Demo_SpatialTable&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;                                                    &lt;/div&gt; &lt;/div&gt; &lt;/span&gt;                                         &lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Un problema muy común al que se tenían que enfrentar los desarrolladores en el pasado era la forma de almacenar y usar grandes objetos binarios, como documentos y archivos multimedia. El método que usaban generalmente consistía en almacenar los archivos fuera de la base de datos y almacenar sólo un puntero en la base de datos que condujese al archivo externo. No obstante, con este método, al cambiar la ubicación del archivo, es necesario actualizar el puntero también.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 se ocupa de este problema con el nuevo tipo de datos FILESTREAM. Con este tipo de datos, se pueden almacenar los datos fuera de la base de datos, pero los datos se consideran parte de la misma para obtener coherencia transaccional. De esta manera, se pueden usar operaciones de archivos comunes al tiempo que se mantiene el rendimiento y las ventajas de seguridad de la base de datos.&lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s7"&gt;Novedades de inteligencia empresarial&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;El aumento en el uso de SQL Server durante los últimos años se ha producido en gran parte como consecuencia de la adopción de estrategias de inteligencia. Las capacidades de inteligencia empresarial no son una novedad en SQL Server, pero SQL Server 2008 incorpora algunas características nuevas.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Por ejemplo, al almacenar datos en almacenes de datos, a menudo se desperdicia espacio debido a los valores NULL. Las columnas que almacenan valores NULL ocupan el máximo espacio permitido para datos que se ha definido en la columna. Esto significa que una columna con miles de valores NULL puede consumir muchos MB de espacio sin almacenar ningún dato.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 introduce columnas dispersas, que permiten el almacenamiento de valores NULL sin tener ocupar espacio físico en el disco. Ya que las columnas dispersas no consumen espacio real, las tablas que contienen columnas dispersas pueden superar el límite de columna de 1.024.&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;SQL Server 2008 también introduce un nuevo mecanismo, la captura de datos modificados, para administrar los cambios incrementales que necesitan ser cargados en el almacén de datos. De esta manera, se capturan y se colocan los datos modificados en un conjunto de tablas de cambios. La captura de datos actualizados, eliminados e insertados en un esquema de almacenamiento permite la carga incremental de almacenes de datos de esas tablas (en lugar de tener que crear instrucciones de inserción personalizadas que intenten determinar los cambios realizados a las filas existentes de datos antes de actualizar el almacén de datos).&lt;/div&gt;                                        &lt;br /&gt;                                        &lt;div class="ArticleTypeTitle" id="s8"&gt;Conclusión&lt;/div&gt;                                         &lt;div class="ArticleNormalPara"&gt;Esto no es más que una breve descripción de lo que SQL Server 2008 tiene preparado. Ofrecerá un amplio conjunto de características nuevas y de actualizaciones para las características existentes que facilitarán el trabajo tanto de administradores como de desarrolladores de bases de datos. Finalmente, ofrecerá escalabilidad y rendimiento muy mejorados para las bases de datos actuales, cada vez más exigentes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fuente: http://technet.microsoft.com&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-8067517361778104596?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/8067517361778104596/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=8067517361778104596' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/8067517361778104596?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/8067517361778104596?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2010/09/novedades-de-sql-server-2008.html' title='Novedades de SQL SERVER 2008'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;C04ASH0zcCp7ImA9Wx5XFUo.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-6374829811940071899</id><published>2010-09-15T14:31:00.000-03:00</published><updated>2010-09-15T14:32:29.388-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-09-15T14:32:29.388-03:00</app:edited><title>Crear una udl para comprobar una conexión</title><content type='html'>&lt;span class="dia"&gt;&lt;/span&gt;&lt;div class="entry"&gt;&lt;p style="margin: 0px;"&gt;En la resolución de problemas de conexión es frecuente la necesidad de verificar los parámetros de una cadena de conexión. Lo más fácil para ello es crear una udl, introducir los parámetros y hacer un test.&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;Para ello, sitúate en el escritorio (o donde quieras) y crea un fichero de texto plano. Dale cualquier nombre y ponle extensión ".udl".&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;img alt="http://qwalgrande.blogspot.es/img/udl_1.gif" src="http://qwalgrande.blogspot.es/img/udl_1.gif" border="0" /&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;Luego hacer doble click sobre la udl y se abrirá un formulario en el que configurar la cadena de conexión. Rellena el proveedor (en la primera pestaña), el nombre del servidor, login, etc.&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;img alt="http://qwalgrande.blogspot.es/img/udl_2.gif" src="http://qwalgrande.blogspot.es/img/udl_2.gif" border="0" /&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;Y por último, pulsas el botón "Test Connection" para comprobarla. Si lo deseas, luego puedes abrir el fichero resultante con notepad, por ejemplo, para ver qué cadena de conexión resulta. Ver esa cadena de conexión puede ser también de utilidad para resolver incidencias de este tipo.&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;img alt="http://qwalgrande.blogspot.es/img/udl_3.gif" src="http://qwalgrande.blogspot.es/img/udl_3.gif" border="0" /&gt;&lt;/p&gt;&lt;br /&gt;fuente: http://qwalgrande.blogspot.es/&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-6374829811940071899?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/6374829811940071899/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=6374829811940071899' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6374829811940071899?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/6374829811940071899?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2010/09/crear-una-udl-para-comprobar-una.html' title='Crear una udl para comprobar una conexión'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;D0YHSXo-fyp7ImA9Wx5XFUs.&quot;'><id>tag:blogger.com,1999:blog-13998690120156414.post-4411531201690204728</id><published>2010-09-15T12:37:00.000-03:00</published><updated>2010-09-15T12:38:58.457-03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-09-15T12:38:58.457-03:00</app:edited><title>Concantenar en Query</title><content type='html'>s muy frecuente tener que construir un campo que concatener los valores de una columna para varios registros. Una forma clásica de realizar esta acción (es decir, que funciona también para versiones antes de SQL Server 2005) es concatenar en una variable:&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;declare&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; @Cadena &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;8000&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;select&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; @Cadena &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;select&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; @Cadena &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; @Cadena &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;','&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; COLUMN_NAME &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;from&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;COLUMNS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; TABLE_NAME &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;'Tabla1'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;ORDER&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;BY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ORDINAL_POSITION&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;select&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;STUFF&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;@Cadena&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; CadenaCampos&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;Desde SQL Server 2005, se puede solventar ese problema en una sóla consulta, haciendo uso de FOR XML PATH, lo que permite una mejor integración en consultas más complejas:&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;select&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;STUFF&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;CAST&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;','&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;AS&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;MAX&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;))&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; COLUMN_NAME&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;COLUMNS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; TABLE_NAME &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;'Tabla1'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;ORDER&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;BY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ORDINAL_POSITION&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;FOR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;XML&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;),&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; CadenaCampos&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;Un ejemplo de esa integración sería el siguiente:&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;Select&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; Table_Name&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;STUFF&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;CAST&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;','&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;AS&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 255);font-size:85%;" &gt;MAX&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;))&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; C&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;COLUMN_NAME&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;COLUMNS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; C&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;where&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; C&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;TABLE_NAME &lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; T&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TABLE_NAME&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;ORDER&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;BY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ORDINAL_POSITION&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;FOR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;XML&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;),&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; 1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;''&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;as&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; CadenaCampos&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;&lt;span style="color: rgb(0, 0, 255);font-size:85%;" &gt;from&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;&lt;span style="color: rgb(128, 128, 128);font-size:85%;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;&lt;span style="color: rgb(0, 128, 0);font-size:85%;" &gt;TABLES&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; T&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;En esta línea se pueden hacer otras cosas más elaboradas, como por ejemplo, construir una sentencia pivot dinámica:&lt;/p&gt;&lt;p style="margin: 0px;"&gt; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/d5544169-7068-4796-88ce-b6eafd0f0b8e"&gt;http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/d5544169-7068-4796-88ce-b6eafd0f0b8e&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;fuente: http://qwalgrande.blogspot.es&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13998690120156414-4411531201690204728?l=martinghazarian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martinghazarian.blogspot.com/feeds/4411531201690204728/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=13998690120156414&amp;postID=4411531201690204728' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/4411531201690204728?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13998690120156414/posts/default/4411531201690204728?v=2'/><link rel='alternate' type='text/html' href='http://martinghazarian.blogspot.com/2010/09/s-muy-frecuente-tener-que-construir-un.html' title='Concantenar en Query'/><author><name>Martín</name><uri>http://www.blogger.com/profile/11622285102100465698</uri><email>noreply@blogger.com</email></author><thr:total>0</thr:total></entry></feed>