{"id":2501,"date":"2021-02-21T15:37:28","date_gmt":"2021-02-21T15:37:28","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2501"},"modified":"2021-02-21T15:37:29","modified_gmt":"2021-02-21T15:37:29","slug":"moviendo-tablas-entre-filegroups-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2501","title":{"rendered":"Moviendo tablas entre Filegroups en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo__D.png\" alt=\"\" class=\"wp-image-2502\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Moviendo tablas de un Filegroup a otro en SQL Server<\/strong><\/h2>\n\n\n\n<p>Una base de datos en SQL Server se puede crear con varios archivos donde se guarda la informaci\u00f3n de las tablas, estos archivos se agrupan en Grupos de archivos llamados Filegroups, cada grupo de archivos puede tener archivos ubicados en diferentes discos y en diferentes carpetas, el objetivo es que la informaci\u00f3n de las tablas se almacene en archivos diferentes lo que puede optimizar la distribuci\u00f3n de la informaci\u00f3n guardada en la base de datos.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>En este art\u00edculo se va a crear una base de datos y las tablas en determinados grupos,<br>luego se va a mover las tablas a grupos diferentes.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Para mayor informaci\u00f3n ver<br><a href=\"https:\/\/manualsqlserver.com\/?p=82\" target=\"_blank\" rel=\"noreferrer noopener\">Crear bases de datos<br><\/a><a href=\"https:\/\/manualsqlserver.com\/?p=103\" target=\"_blank\" rel=\"noreferrer noopener\">Modificar una base de datos, grupos de archivos<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=106\" target=\"_blank\" rel=\"noreferrer noopener\">Modificar una base de datos, archivos de base de datos<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=117\" target=\"_blank\" rel=\"noreferrer noopener\">Crear Tablas<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=113\" target=\"_blank\" rel=\"noreferrer noopener\">Crear Esquemas<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=158\" target=\"_blank\" rel=\"noreferrer noopener\">Crear \u00edndices<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=1499\" target=\"_blank\" rel=\"noreferrer noopener\">Uso de restricciones<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=141\" target=\"_blank\" rel=\"noreferrer noopener\">Tablas particionadas<\/a><\/strong><\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicios<\/strong><\/p>\n\n\n\n<p><strong>Creando la base de datos Ferreteria, esta se va a crear en las unidades C: y D: y al momento de crearla se va a crear adicional al grupo de archivos Primary, dos  grupos, COMERCIAL y LOGISTICA.<\/strong><\/p>\n\n\n\n<p>xp_create_subdir &#8216;C:\\Bases&#8217;<br>go<br>xp_create_subdir &#8216;D:\\Bases&#8217;<br>go<br>Create database Ferreteria<br>on Primary<br>(name = &#8216;F01&#8217;, Filename = &#8216;C:\\Bases\\F01.mdf&#8217;),<br>Filegroup COMERCIAL<br>(name = &#8216;FerreteriaComercial01&#8217;, Filename = &#8216;D:\\Bases\\FerreteriaComercial01.ndf&#8217;),<br>Filegroup LOGISTICA<br>(name = &#8216;F04&#8217;, Filename = &#8216;D:\\Bases\\F04.ndf&#8217;),<br>(name = &#8216;F05&#8217;, Filename = &#8216;D:\\Bases\\F05.ndf&#8217;)<br>LOG on<br>(name = &#8216;FerreteriaLog01&#8217;, Filename = &#8216;D:\\Bases\\FerreteriaLog01.ldf&#8217;)<br>go<br>use Ferreteria<br>go<\/p>\n\n\n\n<p>La imagen muestra la estructura que se va a crear con las tablas Categorias, Productos, Clientes, Facturas y Detalle de Facturas<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01.png\" alt=\"\" class=\"wp-image-2503\" width=\"735\" height=\"416\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01.png 949w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01-300x170.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01-768x435.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_01-795x450.png 795w\" sizes=\"auto, (max-width: 735px) 100vw, 735px\" \/><\/a><\/figure>\n\n\n\n<p>Note que algunas tablas se han ubicado en el esquema Ventas, eso se muestra en el diagrama, el nombre del esquema aparece entre par\u00e9ntesis despu\u00e9s del nombre de la tabla.<\/p>\n\n\n\n<p>Create schema Ventas<br>go<br><strong>La Tabla Categorias se va a crear en el grupo COMERCIAL.<\/strong><br>Create table Ventas.Categorias<br>(<br>CategoriasCodigo nchar(7),<br>CategoriasDescripcion nvarchar(100) not null ,<br>CategoriasFechaCreacion Date constraint CategoriasFechaCreacionDF Default GetDate(),<br>CategoriasEstado nchar(1) constraint CategoriasEstadoDF Default &#8216;A&#8217;,<br>constraint CategoriasPK Primary key (CategoriasCodigo),<br>constraint CategoriasDescripcionUQ Unique (CategoriasDescripcion),<br>constraint CategoriasFechaCreacionCK Check (CategoriasFechaCreacion&lt;= GetDate()),<br>constraint CategoriasEstadoCK Check (CategoriasEstado = &#8216;A&#8217; or CategoriasEstado = &#8216;E&#8217;),<br>)<br><strong>on COMERCIAL<\/strong><br>go<\/p>\n\n\n\n<p><strong>La Tabla Productos se va a crear en el grupo COMERCIAL, note al final de la definici\u00f3n de la tabla se incluye on COMERCIAL<\/strong><\/p>\n\n\n\n<p>Create table Ventas.Productos<br>(<br>ProductosCodigo nchar(10),<br>ProductosCategoriasCodigo nchar(7),<br>ProductosDescripcion nvarchar(80) not null ,<br>ProductosFechaCreacion Date constraint ProductosFechaCreacionDF Default GetDate(),<br>ProductosEstado nchar(1) constraint ProductosEstadoDF Default &#8216;A&#8217;,<br>ProductosStock Numeric(9,2) constraint ProductosStockDF Default 0,<br>ProductosPrecio Numeric(9,2) constraint ProductosPrecioDF Default 0,<br>&#8212; Constraints: Check, Unique, Default, PK, FK<br>constraint ProductosCategoriasFK Foreign key (ProductosCategoriasCodigo)<br>references Ventas.Categorias(CategoriasCodigo),<br>constraint ProductosDescripcionUQ Unique (ProductosDescripcion),<br>constraint ProductosFechaCreacionCK Check (ProductosFechaCreacion&lt;= GetDate()), constraint ProductosEstadoCK Check (ProductosEstado = &#8216;A&#8217; or ProductosEstado = &#8216;E&#8217; or ProductosEstado = &#8216;D&#8217;), constraint ProductosStockCK Check (ProductosStock>=0),<br>constraint ProductosPrecioCK Check (ProductosPrecio>=0),<br>constraint ProductosPK Primary key (ProductosCodigo)<br>)<br><strong>on COMERCIAL<\/strong><br>go<\/p>\n\n\n\n<p><strong>La Tabla Clientes se va a crear en el grupo PRIMARY, note al final de la definici\u00f3n<br>de la tabla no se ha especificado un grupo, por lo que se crea en Primary.<\/strong><\/p>\n\n\n\n<p>Create table Clientes<br>(<br>ClientesCodigo nchar(7),<br>ClientesRazonSocial nvarchar(100) not null ,<br>ClientesFechaRegistro Date constraint ClientesFechaCreacionDF Default GetDate(),<br>ClientesRUC nchar(11),<br>ClientesEstado nchar(1) constraint ClientesEstadoDF Default &#8216;A&#8217;,<br>constraint ClientesPK Primary key (ClientesCodigo),<br>constraint ClientesDescripcionUQ Unique (ClientesRazonSocial)<br>)<br>go<\/p>\n\n\n\n<p><strong>La Tabla Facturas se va a crear en el grupo PRIMARY, note al final de la definici\u00f3n<br>de la tabla no se ha especificado un grupo, por lo que se crea en Primary.<\/strong><br>Create table Facturas<br>(<br>FacturasNumeroSerie nchar(3),<br>FacturasNumeroFactura nchar(7),<br>FacturasFecha DateTime,<br>FacturasSubtotal Numeric(9,2),<br>FacturasValorPorcentajeIGV Numeric(9,4),<br>FacturasMontoIGV As FacturasSubtotal<em>FacturasValorPorcentajeIGV, FacturasTotalFactura As FacturasSubtotal + FacturasSubtotal<\/em>FacturasValorPorcentajeIGV,<br>ClientesCodigo nchar(7),<br>ClientesRazonSocial nvarchar(100) not null ,<br>ClientesRUC nchar(11),<br>constraint FacturasPK Primary key (FacturasNumeroSerie, FacturasNumeroFactura),<br>constraint FacturasClientesFK Foreign key (ClientesCodigo)<br>references Clientes(ClientesCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>La Tabla Detalle de Factura se va a crear en el grupo LOGISTICA, note al final de<br>la definici\u00f3n de la tabla se incluye on LOGISTICA, esta tabla se va a usar como ejemplo para moverla a otro grupo.<\/strong><\/p>\n\n\n\n<p>Create table DetalleFactura<br>(<br>FacturasNumeroSerie nchar(3),<br>FacturasNumeroFactura nchar(7),<br>ProductosCodigo nchar(10),<br>ProductosDescripcion nvarchar(80) not null ,<br>DetalleFacturaCantidadVendida Numeric(19,2),<br>DetalleFacturaPrecioVenta Numeric(9,2),<br>DetalleFacturaImporteItem As DetalleFacturaCantidadVendida* DetalleFacturaPrecioVenta,<br>constraint DetalleFacturaPK Primary key<br>(FacturasNumeroSerie,FacturasNumeroFactura,ProductosCodigo),<br>constraint DetalleFacturaFacturasFK Foreign key (FacturasNumeroSerie,FacturasNumeroFactura)<br>references dbo.Facturas(FacturasNumeroSerie,FacturasNumeroFactura),<br>constraint DetalleFacturasProductosFK Foreign key (ProductosCodigo)<br>references Ventas.Productos(ProductosCodigo)<br>)<br><strong>on LOGISTICA<\/strong><br>go<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Grupos y tablas<\/strong><\/p>\n\n\n\n<p>Para visualizar los grupos de archivos y sus tablas se va a consultas las vistas del sistema sys.Tables que contiene las tablas de la base de datos, sys.Indexes que contiene los \u00edndices de la base de datos y sys.filegroups que contiene los grupos de archivos de la base de datos.<\/p>\n\n\n\n<p>select * from sys.tables<br>select * from sys.indexes<br>select * from sys.filegroups<br>go<\/p>\n\n\n\n<p><strong>Para la lista de las tablas y los grupos a las que pertenecen<\/strong><\/p>\n\n\n\n<p>SELECT\u00a0\u00a0<br>T.name\u00a0As\u00a0&#8216;Tabla&#8217;,<br>G.name AS &#8216;Grupo de archivos&#8217;<br>from sys.tables\u00a0As\u00a0T<br>JOIN\u00a0sys.indexes\u00a0As\u00a0I on T.object_id\u00a0=\u00a0I.object_id<br>AND\u00a0I.index_id\u00a0&lt;=\u00a01 &#8212; 1 indica PK<br>LEFT JOIN\u00a0sys.filegroups\u00a0As\u00a0G on G.data_space_id\u00a0=\u00a0I.data_space_id<br>where T.lob_data_space_id = 0 &#8212; Para las tablas que almacenan datos<br>ORDER BY\u00a0\u00a0[Grupo de archivos], Tabla<br>go<br><strong>La imagen muestra el resultado<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_02.png\" alt=\"\" class=\"wp-image-2504\" width=\"620\" height=\"401\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_02.png 407w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_02-300x194.png 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Mover la tabla DetalleFactura del grupo LOGISTICA al grupo COMERCIAL <\/strong><\/p>\n\n\n\n<p>Para mover una tabla de un grupo de archivos a otro, se puede proceder de dos formas:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Se debe cambiar el \u00edndice agrupado, se elimina la restricci\u00f3n de tipo PK movi\u00e9ndola al nuevo grupo, luego se crea la PK nuevamente.<\/li><li>Crear el \u00edndice agrupado (Clustered), sobre escribiendo el actual y direccion\u00e1ndolo al nuevo grupo.<\/li><\/ol>\n\n\n\n<p><strong>Antes de mover la tabla de un grupo a otro, la ventana de propiedades permite  mostrar el grupo de archivos donde se encuentra la informaci\u00f3n de la tabla.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_03.png\" alt=\"\" class=\"wp-image-2505\" width=\"721\" height=\"681\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_03.png 698w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_03-300x284.png 300w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/a><\/figure>\n\n\n\n<p><strong>La imagen anterior muestra la ubicaci\u00f3n de la tabla Detalle de Factura en el grupo<br>de archivos LOGISTICA, pulsando bot\u00f3n derecho en la tabla y luego seleccionar propiedades, en la p\u00e1gina Storage se puede visualizar que pertenece a LOGISTICA<\/strong><\/p>\n\n\n\n<p>Se puede visualizar tambi\u00e9n usando la siguiente instrucci\u00f3n<br>sp_help &#8216;[dbo].[DetalleFactura]&#8217;<br>go<br>La imagen siguiente muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04-1024x471.png\" alt=\"\" class=\"wp-image-2506\" width=\"815\" height=\"374\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04-1024x471.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04-300x138.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04-768x353.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04-795x366.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_04.png 1093w\" sizes=\"auto, (max-width: 815px) 100vw, 815px\" \/><\/a><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Moviendo la tabla al grupo de archivos COMERCIAL<\/strong><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Forma 1<\/strong>: moviendo la PK.<\/p>\n\n\n\n<p>Paso 1: <strong>Eliminar la PK y moverla a COMERCIAL<\/strong><br>Alter table DetalleFactura<br>drop constraint DetalleFacturaPK<br>with ( move to COMERCIAL)<br>go<\/p>\n\n\n\n<p><strong>Note que se ha usado la opci\u00f3n move to para mover los datos al nuevo grupo.<\/strong><\/p>\n\n\n\n<p>Paso 2: <strong>Crear nuevamente la PK<\/strong><br>Alter table DetalleFactura add constraint<br>DetalleFacturaPK primary key<br>(FacturasNumeroSerie,FacturasNumeroFactura,ProductosCodigo)<br>go<\/p>\n\n\n\n<p><strong>El listado de las tablas y sus grupos se muestra con el resultado<br><\/strong>SELECT\u00a0\u00a0<br>T.name\u00a0As\u00a0&#8216;Tabla&#8217;,<br>G.name AS &#8216;Grupo de archivos&#8217;<br>from sys.tables\u00a0As\u00a0T<br>JOIN\u00a0sys.indexes\u00a0As\u00a0I on T.object_id\u00a0=\u00a0I.object_id<br>AND\u00a0I.index_id\u00a0&lt;=\u00a01 &#8212; 1 indica PK<br>LEFT JOIN\u00a0sys.filegroups\u00a0As\u00a0G on G.data_space_id\u00a0=\u00a0I.data_space_id<br>where T.lob_data_space_id = 0 &#8212; Para las tablas que almacenan datos<br>ORDER BY\u00a0\u00a0[Grupo de archivos], Tabla<br>go<br>La imagen muestra el resultado.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_05.png\" alt=\"\" class=\"wp-image-2507\" width=\"655\" height=\"409\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_05.png 392w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_05-300x188.png 300w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Forma <\/strong>2: creando y sobre escribiendo el \u00edndice agrupado.<\/p>\n\n\n\n<p>Otra forma de pasar la tabla a otro grupo de archivos es redefinir el \u00edndice agrupado<br>usando la opci\u00f3n On NombreGrupo al final de la instrucci\u00f3n.<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Para pasar la tabla Detalle de Factura al grupo Primary<\/strong><\/p>\n\n\n\n<p>CREATE unique Clustered INDEX\u00a0DetalleFacturaPK<br>on\u00a0DetalleFactura(FacturasNumeroSerie,FacturasNumeroFactura,ProductosCodigo)<br>WITH\u00a0(DROP_EXISTING=ON,ONLINE=ON)\u00a0<strong>ON [Primary]<\/strong><br>go<\/p>\n\n\n\n<p>Ver la estructura de la tabla DetalleFactura, para visualizar el grupo al que pertenece.<br>sp_help &#8216;[dbo].[DetalleFactura]&#8217;<br>go<br>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06-1024x508.png\" alt=\"\" class=\"wp-image-2508\" width=\"752\" height=\"372\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06-1024x508.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06-300x149.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06-768x381.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06-795x394.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_06.png 1093w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/a><\/figure>\n\n\n\n<p>SELECT&nbsp;&nbsp;<br>T.name&nbsp;As&nbsp;&#8216;Tabla&#8217;,<br>G.name AS &#8216;Grupo de archivos&#8217;<br>from sys.tables&nbsp;As&nbsp;T<br>JOIN&nbsp;sys.indexes&nbsp;As&nbsp;I on T.object_id&nbsp;=&nbsp;I.object_id<br>AND&nbsp;I.index_id&nbsp;&lt;=&nbsp;1 &#8212; 1 indica PK<br>LEFT JOIN&nbsp;sys.filegroups&nbsp;As&nbsp;G on G.data_space_id&nbsp;=&nbsp;I.data_space_id<br>where T.lob_data_space_id = 0 &#8212; Para las tablas que almacenan datos<br>ORDER BY&nbsp;&nbsp;[Grupo de archivos], Tabla<br>go<br>La imagen muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_07.png\" alt=\"\" class=\"wp-image-2509\" width=\"619\" height=\"387\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_07.png 392w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_07-300x188.png 300w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:24px\"><strong>Tabla particionada<\/strong><\/p>\n\n\n\n<p>Al crear una tabla particionada la informaci\u00f3n de esta se distribuye en los grupos de<br>acuerdo al esquema de partici\u00f3n. Se va a crear una tabla para Pedidos particionada para ver como se muestra en el listado. (Ver <strong><strong><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=141\" target=\"_blank\">Tablas particionadas<\/a><\/strong><\/strong>)<\/p>\n\n\n\n<p><strong>Funci\u00f3n de partici\u00f3n<\/strong><br>CREATE PARTITION FUNCTION FuncionParticionPedidosFP (nchar(15))<br>AS RANGE LEFT FOR VALUES (&#8216;D&#8217;,&#8217;L&#8217;,&#8217;Q&#8217;,&#8217;V&#8217;)<br>go<\/p>\n\n\n\n<p><strong>Esquema de partici\u00f3n<br><\/strong>CREATE PARTITION SCHEME EsquemaParticionPedidosEP<br>AS PARTITION FuncionParticionPedidosFP<br>TO (COMERCIAL,LOGISTICA,[PRIMARY],[PRIMARY],COMERCIAL)<br>go<\/p>\n\n\n\n<p>Create table Pedidos<br>(<br>PedidosCodigo nchar(15) ,<br>PedidosFecha Date,<br>ClientesCodigo nchar(7),<br>constraint PedidosPK Primary key (PedidosCodigo)<br>) on EsquemaParticionPedidosEP (PedidosCodigo)<br>go<\/p>\n\n\n\n<p>Listado de las tablas y los grupos a los que pertenecen<\/p>\n\n\n\n<p>SELECT&nbsp;&nbsp;T.name&nbsp;As&nbsp;&#8216;Tabla&#8217;,<br>G.name As &#8216;Grupo de archivos&#8217;<br>from sys.tables&nbsp;As&nbsp;T<br>JOIN&nbsp;sys.indexes&nbsp;As&nbsp;I on T.object_id&nbsp;=&nbsp;I.object_id<br>AND&nbsp;I.index_id&nbsp;&lt;=&nbsp;1 &#8212; 1 indica PK<br>LEFT JOIN&nbsp;sys.filegroups&nbsp;As&nbsp;G on G.data_space_id&nbsp;=&nbsp;I.data_space_id<br>where T.lob_data_space_id = 0 &#8212; Para las tablas que almacenan datos<br>ORDER BY&nbsp;&nbsp;[Grupo de archivos], Tabla<br>go<br>La imagen siguiente muestra el resultado<br>Note que la tabla Pedidos muestra en Grupo de archivos el valor de Null, esto<br>porque es una tabla particionada.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_09.png\" alt=\"\" class=\"wp-image-2511\" width=\"644\" height=\"446\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_09.png 396w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_09-300x208.png 300w\" sizes=\"auto, (max-width: 644px) 100vw, 644px\" \/><\/a><\/figure>\n\n\n\n<p>Se puede incluir la funci\u00f3n IIF para mostrar el mensaje \u00abTabla Particionada\u00bb<\/p>\n\n\n\n<p>SELECT&nbsp;&nbsp;T.name&nbsp;As&nbsp;&#8216;Tabla&#8217;,<br>IIF(G.type=&#8217;FG&#8217;,G.name,&#8217;Tabla Particionada&#8217;)&nbsp;<br>As&nbsp;&#8216;Grupo de archivos&#8217;<br>from sys.tables&nbsp;As&nbsp;T<br>JOIN&nbsp;sys.indexes&nbsp;As&nbsp;I on T.object_id&nbsp;=&nbsp;I.object_id<br>AND&nbsp;I.index_id&nbsp;&lt;=&nbsp;1 &#8212; 1 indica PK<br>LEFT JOIN&nbsp;sys.filegroups&nbsp;As&nbsp;G on G.data_space_id&nbsp;=&nbsp;I.data_space_id<br>where T.lob_data_space_id = 0 &#8212; Para las tablas que almacenan datos<br>ORDER BY&nbsp;&nbsp;[Grupo de archivos], Tabla<br>go<br>La imagen siguiente muestra el resultado<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_08.png\" alt=\"\" class=\"wp-image-2510\" width=\"556\" height=\"396\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_08.png 404w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_08-300x214.png 300w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Borrar el grupo de archivos LOGISTICA<\/strong><\/p>\n\n\n\n<p>Al crear la base de datos, al grupo LOGISTICA se le incluy\u00f3 dos archivos, las siguientes instrucciones eliminan esos archivos. Estos archivos no contienen tablas porque ninguna de ellas ha sido direccionada a este grupo.<\/p>\n\n\n\n<p>Alter database Ferreteria remove file F04<br>Alter database Ferreteria remove file F05<br>go<br><strong>Mensaje del resultado de la instrucci\u00f3n<br>Se ha quitado archivo &#8216;F04&#8217;.<br>Se ha quitado archivo &#8216;F05&#8217;.<\/strong><\/p>\n\n\n\n<p>Ahora se va a intentar borrar el grupo LOGISTICA<br>alter database Ferreteria remove filegroup LOGISTICA<br>go<br>Aparece un mensaje de error<br>Msg 5042, Level 16, State 12, Line 310<br>El objeto &#8216;LOGISTICA&#8217; de tipo grupo de archivos no se puede quitar porque no est\u00e1 vac\u00edo.<\/p>\n\n\n\n<p>La imagen muestra que el grupo de archivos LOGISTICA no tiene archivos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11.png\" alt=\"\" class=\"wp-image-2512\" width=\"744\" height=\"561\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11.png 874w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11-300x227.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11-768x580.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_11-795x600.png 795w\" sizes=\"auto, (max-width: 744px) 100vw, 744px\" \/><\/a><\/figure>\n\n\n\n<p>No se puede eliminar el grupo de archivos porque el esquema de partici\u00f3n de la tabla Pedidos direcciona una de las particiones al grupo LOGISTICA.  El esquema de partici\u00f3n llamado EsquemaParticionPedidosEP en el que se asign\u00f3 una de las particiones al grupo LOGISTICA.<\/p>\n\n\n\n<p><strong>Para poder eliminar el grupo, debemos reconstruir el \u00edndice de la tabla Pedidos, cambiar el \u00edndice y mover el contenido a un grupo.<\/strong><\/p>\n\n\n\n<p>CREATE unique Clustered INDEX\u00a0PedidosPK<br>on\u00a0Pedidos(PedidosCodigo)<br>WITH\u00a0(DROP_EXISTING=ON,ONLINE=ON)\u00a0<strong>ON [Primary]<\/strong><br>go<br><strong>Eliminar luego el esquema de partici\u00f3n<\/strong><br>Drop partition scheme EsquemaParticionPedidosEP<br>go<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Ahora si es posible eliminar el grupo de archivos<\/strong><\/p>\n\n\n\n<p>alter database Ferreteria remove filegroup LOGISTICA<br>go<br>La imagen muestra los grupos de archivos de la BD Ferreteria<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12.png\" alt=\"\" class=\"wp-image-2513\" width=\"729\" height=\"588\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12.png 817w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12-300x242.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12-768x620.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_12-795x642.png 795w\" sizes=\"auto, (max-width: 729px) 100vw, 729px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Restablecer el grupo de archivos y los archivos eliminados<\/strong><\/p>\n\n\n\n<p>Se debe realizar una copia de seguridad del Log de la Base de datos, previamente se debe crear un Device para el Backup.<br><strong>La siguiente instrucci\u00f3n crea un Device en el disco llamado FerreteriaBKLog<\/strong><br>Execute sp_addumpdevice &#8216;disk&#8217;, &#8216;FerreteriaBAKLog&#8217;, &#8216;C:\\Bases\\FerreLog.bak&#8217; ;<br>go<br><strong>Obtener el Backup del Log.<\/strong><br>Backup log Ferreteria to FerreteriaBAKLog<br>go<br><strong>Ahora se puede volver a agregar el grupo y los archivos.<\/strong><br>Alter database Ferreteria add filegroup LOGISTICA<br>go<br>Alter database Ferreteria add file<br>(name = &#8216;F04&#8217;, Filename = &#8216;D:\\Bases\\F04.ndf&#8217;),<br>(name = &#8216;F05&#8217;, Filename = &#8216;D:\\Bases\\F05.ndf&#8217;)<br>to filegroup LOGISTICA<br>go<br>La imagen muestra los grupos de archivos de la base de datos<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_13.png\" alt=\"\" class=\"wp-image-2514\" width=\"712\" height=\"673\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_13.png 698w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/02\/ManualSQL_MoverTablasEntreGrupo_13-300x284.png 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Moviendo tablas de un Filegroup a otro en SQL Server Una base de datos en SQL Server se puede crear con varios archivos donde se guarda la informaci\u00f3n de las tablas, estos archivos se agrupan en Grupos de archivos llamados Filegroups, cada grupo de archivos puede tener archivos ubicados en diferentes discos y en diferentes &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2501\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2502,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7],"tags":[98,20,282],"class_list":["post-2501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esquemastablas","category-indices","tag-alter-database","tag-create-table","tag-move-to","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2501"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2501\/revisions"}],"predecessor-version":[{"id":2515,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2501\/revisions\/2515"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2502"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}