<?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/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7148615757456953101</id><updated>2024-10-07T02:15:50.983-03:00</updated><category term="Bases de Datos"/><category term="TSQL"/><category term="SQL Server 2008"/><category term="SQL Server 2000"/><title type='text'>Argel Blog</title><subtitle type='html'>&quot;desencanutandome&quot; lo que voy aprendiendo</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://argel-aalcaide.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-4758177920378769347</id><published>2011-01-14T18:10:00.001-03:00</published><updated>2011-01-14T18:14:47.470-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de Datos"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL"/><title type='text'>OUTPUT en SQL Server</title><content type='html'>A partir de la version 2005 de SQL Server se introduce la sentencia OUTPUT, mediante la cual se puede ver las filas afectadas por una sentencia INSERT, UPDATE ,DELETE o MERGE individualmente como si fuera un SELECT de los registros afectados o insertarlos directamente en alguna tabla de auditoría por ejemplo.&lt;br /&gt;
&lt;br /&gt;
Su sintaxis según la &lt;a href=&quot;http://msdn.microsoft.com/es-es/library/ms177564%28v=SQL.105%29.aspx&quot;&gt;documentación de MSDN&lt;/a&gt; es la siguiente:&lt;br /&gt;
&lt;pre class=&quot;sql&quot; name=&quot;code&quot;&gt;&lt;output_clause&gt; ::=
{
[ OUTPUT &lt;dml_select_list&gt; INTO { @table_variable | output_table } [ ( column_list ) ] ]
[ OUTPUT &lt;dml_select_list&gt; ]
}
&lt;dml_select_list&gt; ::=
{ &lt;column_name&gt; | scalar_expression } [ [AS] column_alias_identifier ]
[ ,...n ]

&lt;column_name&gt; ::=
{ DELETED | INSERTED | from_table_name } . { * | column_name }
| $action
&lt;/column_name&gt;&lt;/column_name&gt;&lt;/dml_select_list&gt;&lt;/dml_select_list&gt;&lt;/dml_select_list&gt;&lt;/output_clause&gt;&lt;/pre&gt;para complementar algo el post y que no sea una vil copia de la documentación MSDN, Elaboraremos un ejemplo mediante una pequeña tabla con la siguiente estructura:&lt;br /&gt;
&lt;pre class=&quot;sql&quot; name=&quot;code&quot;&gt;create table pruebaOutput (
 ID int not null identity(1,1) primary key, 
 valorA varchar(100) not null, 
 valorB varchar(100) not null )
&lt;/pre&gt;y otra tabla pequeña que ocuparemos como tabla de auditoría&lt;br /&gt;
&lt;pre class=&quot;sql&quot; name=&quot;code&quot;&gt;create table auditoriaOutput ( 
 ID int not null identity(1,1) primary key, 
 ID_Old int,
 ID_New int,
 valorA_Old varchar(100), 
 valorA_New varchar(100) ,
 valorB_Old varchar(100), 
 valorB_New varchar(100) )
&lt;/pre&gt;&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/781603b6-a5dc-4f45-98c6-cbbcb79748f9/outputPostTables.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/781603b6-a5dc-4f45-98c6-cbbcb79748f9/outputPostTables.png&quot; width=&quot;420&quot; height=&quot;200&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Considerando que no tenemos datos en ninguna de las tablas creadas, partamos utilizando OUTPUT dentro de un INSERT&lt;br /&gt;
&lt;pre class=&quot;sql&quot; name=&quot;code&quot;&gt;Insert into pruebaOutput (valorA, valorB) 
OUTPUT inserted.ID, inserted.valorA, inserted.valorB
values 
( &#39;Primer Valor A&#39;, &#39;Primer Valor B&#39; ),
( &#39;Segundo Valor A&#39;, &#39;Segundo Valor B&#39; ),
( &#39;Tercer Valor A&#39;, &#39;Tercer Valor B&#39; ),
( &#39;Cuarto Valor A&#39;, &#39;Cuarto Valor B&#39; ),
( &#39;Quinto Valor A&#39;, &#39;Quinto Valor B&#39; ),
( &#39;Sexto Valor A&#39;, &#39;Sexto Valor B&#39; ),
( &#39;Septimo Valor A&#39;, &#39;Septimo Valor B&#39; ),
( &#39;Octavo Valor A&#39;, &#39;Octavo Valor B&#39; )
&lt;/pre&gt;resultado de la clausula output en el insert&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/e3b2d6db-c6ac-4936-ad84-55f5e6b2e809/insertOutputResult.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/e3b2d6db-c6ac-4936-ad84-55f5e6b2e809/insertOutputResult.png&quot; width=&quot;256&quot; height=&quot;179&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Como utilizamos la clausula OUTPUT dentro del insert este insert nos retornará la lista de valores insertados, notese que para este caso utilizamos la palabra clave &quot;inserted&quot; de la sentencia, esta nos permite retornar los nuevos valores o los valores insertados para las columnas especificadas. &lt;br /&gt;
Ahora utilizando output en un delete&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;delete from pruebaOutput 
OUTPUT deleted.ID, deleted.valorA, deleted.valorB
where valorA like &#39;%quinto%&#39; 
&lt;/pre&gt;&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/6410fc5f-77de-4293-ab71-f8a871618843/resultadoOutputDelete.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/6410fc5f-77de-4293-ab71-f8a871618843/resultadoOutputDelete.png&quot; width=&quot;234&quot; height=&quot;46&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Esta al igual que en el ejemplo anterior nos retornara las filas afectadas por la sentencia delete, de acuerdo a las columnas que le especifiquemos en el OUTPUT, en este caso como estamos borrando valores debemos usar la palabra clave &quot;deleted&quot; para obtener los valores borrados&lt;br /&gt;
Ahora vamos con un ejemplo para un update, en mi caso tuve que poner los ID desde el 12 al 15 porque estuve jugando un rato antes con esto y se incremento el valor para asignar del identity.&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;update pruebaOutput set 
 valorA = valorA + &#39;mas un extra&#39;
   ,valorB = valorA + &#39;(ahora el valor B es el valor A)&#39;
OUTPUT inserted.ID, deleted.ID, inserted.valorA, inserted.valorB, deleted.valorA, deleted.valorB  
where ID between 12 and 15 
&lt;/pre&gt;lo que nos devuelve es esto&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/9470c5d3-9500-4a2e-a932-b9e068d5031f/resultadoOutputDelete.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/9470c5d3-9500-4a2e-a932-b9e068d5031f/resultadoOutputDelete.png&quot; width=&quot;630&quot; height=&quot;79&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
en este caso lo que utilizamos dentro del output las keywords &quot;inserted&quot; y &quot;deleted&quot;, de esta forma en nuestro comando UPDATE, las columnas prefijadas por &quot;inserted&quot; corresponden a los nuevos valores y las prefijadas por &quot;deleted&quot; a los reemplazados. &lt;br /&gt;
Por último les muestro como utilizar esta sentencia para apoyar la auditoria de registros, por ejemplo cuando corremos algun script medio truculento&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;--actualizamos algunos valores de la tabla 
update pruebaOutput set 
 valorB = valorB + &#39;(cambiado para insertar en la tabla de auditoria)&#39;
OUTPUT deleted.ID, inserted.ID
     , deleted.valorA, inserted.valorA
     , deleted.valorB, inserted.valorB  
INTO auditoriaOutput
where ID between 15 and 18      

--insertamos nuevos registros en la tabla
Insert into pruebaOutput (valorA, valorB) 
OUTPUT null, inserted.ID
     , null, inserted.valorA
     , null, inserted.valorB
INTO auditoriaOutput     
values 
( &#39;otro valor mas para A&#39;, &#39;para B tambien&#39; ),
( &#39;no soy mas creativo para esto&#39;, &#39;es lo que hay no mas&#39; )

--borramos toda la tabla no mas
delete from pruebaOutput
OUTPUT deleted.ID, null
     , deleted.valorA, null
     , deleted.valorB, null
INTO auditoriaOutput     
&lt;/pre&gt;Al ejecutar todo junto y como estamos insertando en una tabla veremos los mensajes de filas afectadas, pero si consultamos los valores de la tabla veremos lo que ha pasado.&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;select * from auditoriaOutput
&lt;/pre&gt;&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/7a3beae1-b2d8-40c4-81a2-aebe9c669c20/resultadoOuputenTabla.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/7a3beae1-b2d8-40c4-81a2-aebe9c669c20/resultadoOuputenTabla.png&quot; width=&quot;628&quot; height=&quot;287&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Usar el output sobre el comando MERGE, es lo mismo, pero como no se bien como utilizar merge lo dejo pendiente para cuando aprenda</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/output-en-sql-server.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/4758177920378769347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/4758177920378769347'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/output-en-sql-server.html' title='OUTPUT en SQL Server'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-1849037366679503900</id><published>2011-01-13T09:59:00.000-03:00</published><updated>2011-01-13T09:59:45.872-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de Datos"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL"/><title type='text'>Obtener las Relaciones FK de una tabla</title><content type='html'>Desde el &lt;a href=&quot;http://blogs.prodata.ie/post/TSQL-to-determine-all-FKe28099s-in-a-database.aspx&quot;&gt;siguiente enlace&lt;/a&gt; encontré como obtener las FK de todas las tablas de una base de datos, realizándole un mínimo cambio lo ajusté para que obtuviese solo las FK&#39;s de alguna tabla en particular&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;declare @tabla as varchar(1000) 
set @tabla = &#39;nombre_tabla&#39;

SELECT  so.name as ForeignTableName, 
  sc.name  as ColumnName, 
  s.name + &#39;.&#39; + PKT.name as PrimaryTableName
from sysreferences r
inner join  sysconstraints c on r.constid = c.constid
inner join sys.tables pkt on PKT.object_id = r.rkeyid
inner join sys.columns sc on sc.column_id = r.fkey1 and r.fkeyid = sc.object_id 
inner join sys.schemas s on s.schema_id=pkt.schema_id
inner join sys.tables so on r.fkeyid = so.object_id
where so.is_ms_shipped = 0 
  and ( pkt.object_id = object_id(@tabla) or r.rkeyid = object_id(@tabla))
order by so.name, sc.name
&lt;/pre&gt;esto generaría un resultado como el siguiente&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/12c1559d-24d2-4819-978f-1d51a3b26854/Get%20FK%20Sp%20result.png&quot;&gt;&lt;img class=&quot;embeddedObject&quot; src=&quot;http://content.screencast.com/users/Argel_cl/folders/Jing/media/12c1559d-24d2-4819-978f-1d51a3b26854/Get%20FK%20Sp%20result.png&quot; width=&quot;367&quot; height=&quot;60&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/obtener-las-relaciones-fk-de-una-tabla.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/1849037366679503900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/1849037366679503900'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/obtener-las-relaciones-fk-de-una-tabla.html' title='Obtener las Relaciones FK de una tabla'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-3548890805947605118</id><published>2011-01-11T11:05:00.000-03:00</published><updated>2011-01-11T11:07:05.483-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de Datos"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL"/><title type='text'>Obtener las columnas de una tabla en SQL Server 2008</title><content type='html'>Aquí les dejo un script con el cual podemos obtener la estructura de una tabla dada, especifícada en la variable @tabla, identificando las columnas que son PK dentro de la misma. Creo que tambien sirve perfectamente para SQL Server 2005.&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;declare @tabla as varchar(1000) 
set @tabla = &#39;gen_intranet_dfncn_prmtr&#39;

select OBJECT_NAME(OBJECT_ID(@tabla)) tabla,
 col.name as nombre, 
 ( select name from sys.types tip where col.system_type_id = tip.system_type_id ) as tipo, 
 col.max_length as longitud,
 col.precision as precisión,
 col.scale as escala,
 case when col.is_nullable = 0 then &#39;NOT NULL&#39; else &#39;NULL&#39; end as nullable,
 case when col.is_identity = 0 then &#39;&#39; else &#39;SI&#39; end as [es identity],
 case when icol.column_id is not null then &#39;PK&#39; else &#39;&#39; end as [es pk]
from sys.columns col 
 left join ( select icol.* 
    from sys.index_columns icol 
     inner join sys.indexes idx on icol.index_id = idx.index_id 
    where idx.is_primary_key = 1
      and idx.object_id = object_id(@tabla)) as icol on col.column_id = icol.column_id and col.object_id = icol.object_id
where col.object_id = object_id(@tabla)
order by col.column_id
&lt;/pre&gt;El resultado que nos queda sería algo como esto:&lt;br /&gt;
&lt;a href=&quot;http://goo.gl/photos/vdEu8A0736&quot; imageanchor=&quot;1&quot; style=&quot;clear:right;margin-bottom:1em;margin-left:1em&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT7lIcIf1CN906PcoAv5Tfq8_tMtbcGBbSr4N-tBD-XtnHTdIZEiUhaUlPmB-8FlKEm543VvypKwsaP9BqWkziJ1Obprgm2ahRc3wTr9aldrhVWP09UZHP7NXR9pOclfWQxwQp2gK5sh0/s512/ObtColumnas.png&quot;&gt;&lt;/a&gt;</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/obtener-las-columnas-de-una-tabla-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/3548890805947605118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/3548890805947605118'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2011/01/obtener-las-columnas-de-una-tabla-en.html' title='Obtener las columnas de una tabla en SQL Server 2008'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT7lIcIf1CN906PcoAv5Tfq8_tMtbcGBbSr4N-tBD-XtnHTdIZEiUhaUlPmB-8FlKEm543VvypKwsaP9BqWkziJ1Obprgm2ahRc3wTr9aldrhVWP09UZHP7NXR9pOclfWQxwQp2gK5sh0/s72-c/ObtColumnas.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-3146483171890261139</id><published>2010-07-23T12:05:00.000-04:00</published><updated>2011-01-11T11:06:58.595-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de Datos"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL"/><title type='text'>Convertir TimeSpan .Net a DateTime de SQL Server</title><content type='html'>El tipo de datos TimeSpan de .Net generalmente se mapea a SQL Server en forma de un long o big int, lo cual está correcto ya que SQL Server no posee un tipo de datos adhoc para representar el TimeSpan (por lo menos en 2005). &lt;br /&gt;
El problema surge cuando queremos convertir este los ticks guardados en base de datos a un DateTime. &lt;br /&gt;
Resulta que los Ticks son la representación en nanosegundos (1 paso del tick corresponde a 100 nanosegundos) de un intervalo de tiempo dado, por lo tanto si quisieramos convertir a un datetime estos valores solo debieramos agregarle a una fecha X el valor de los ticks que queremos para representar la hora. Como en SQL Server 2005, la funcion DATEADD permite solo agregar hasta milisegundos debemos los ticks a milisegundos para utilizarlos y esto lo hacemos dividiendo por 10.000 o multiplicando por 10&lt;sup&gt;-4&lt;/sup&gt; esto por que cada tick esta representado en como intervalos de 100 nanosegundos (10&lt;sup&gt;2&lt;/sup&gt; * 10&lt;sup&gt;-9&lt;/sup&gt; = 10&lt;sup&gt;-7&lt;/sup&gt;). &lt;br /&gt;
&lt;br /&gt;
Dejando toda la cháchara de lado el ejemplo que es lo que importa&lt;br /&gt;
&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot; &gt;--queremos representar la fecha 2010-01-07 a las 14:15:00 hrs, es decir, 
--con 513000000000 ticks
SELECT DATEADD(millisecond, 513000000000 / 10000, &#39;2010-01-07&#39;)
&lt;/pre&gt;&lt;br /&gt;
lo que nos devuelve &lt;pre&gt;2010-01-07 14:15:00.000&lt;/pre&gt;</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2010/07/convertir-timespan-net-datetime-de-sql.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/3146483171890261139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/3146483171890261139'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2010/07/convertir-timespan-net-datetime-de-sql.html' title='Convertir TimeSpan .Net a DateTime de SQL Server'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-2896065816178147593</id><published>2009-09-29T15:13:00.001-04:00</published><updated>2011-01-11T11:06:58.595-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bases de Datos"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2000"/><category scheme="http://www.blogger.com/atom/ns#" term="TSQL"/><title type='text'>Ejecutar Comandos en SQL Server 2000</title><content type='html'>Algo pequeño, con este comando (&lt;span style=&quot;font-weight: bold;&quot;&gt;xp_cmdshell&lt;/span&gt;) pueden ejecutar un comando de MS-DOS desde el servidor de SQL Server&lt;br /&gt;
&lt;br /&gt;
Por ejemplo&lt;br /&gt;
&lt;br /&gt;
&lt;pre name=&quot;code&quot; class=&quot;sql&quot;&gt;exec xp_cmdshell &#39;dir c:\*.* /B&#39;
&lt;/pre&gt;&lt;br /&gt;
devuelve&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; height=&quot;277&quot; style=&quot;border-collapse: collapse; border: 1px solid; text-align: center; width: 186px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;span style=&quot;font-size: small; font-weight:bolder&quot;&gt;OUTPUT&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.rnd&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Archivos de programa&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AUTOEXEC.BAT&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;CONFIG.SYS&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Documents and Settings&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;ea011e2d283b8a4855eb45&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Inetpub&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;lotus&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;oracle&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;WINDOWS&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;NULL&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2009/09/ejecutar-comandos-en-sql-server-2000.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/2896065816178147593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/2896065816178147593'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2009/09/ejecutar-comandos-en-sql-server-2000.html' title='Ejecutar Comandos en SQL Server 2000'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7148615757456953101.post-437986589314328875</id><published>2009-05-26T11:46:00.002-04:00</published><updated>2010-07-23T11:08:05.866-04:00</updated><title type='text'>Bienvenida</title><content type='html'>Como prácticamente no tengo posts, la mayoría irá a leer esto, espero que en el futuro este blog puede aportar tanto a mí, ayudandome a recordar cosas que vaya haciendo. como a otros que puedan encontrar solución a sus problemas en base a mis vivencias como programador...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Saludos</content><link rel='replies' type='text/html' href='http://argel-aalcaide.blogspot.com/2009/05/bienvenida.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/437986589314328875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7148615757456953101/posts/default/437986589314328875'/><link rel='alternate' type='text/html' href='http://argel-aalcaide.blogspot.com/2009/05/bienvenida.html' title='Bienvenida'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04102151345968076964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>