{"id":1743,"date":"2020-05-24T20:43:53","date_gmt":"2020-05-24T20:43:53","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1743"},"modified":"2020-05-24T20:43:54","modified_gmt":"2020-05-24T20:43:54","slug":"usando-filestream-y-filetables-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1743","title":{"rendered":"Usando FileStream y FileTables en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream___D.png\" alt=\"\" class=\"wp-image-1744\" width=\"211\" height=\"331\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream___D.png 250w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream___D-191x300.png 191w\" sizes=\"auto, (max-width: 211px) 100vw, 211px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">FileTables y FileStream en SQL Server<\/h2>\n\n\n\n<p style=\"font-size:24px\"><strong>Tablas de Archivos en SQL Server<\/strong><\/p>\n\n\n\n<p>La caracter\u00edstica FileTable brinda compatibilidad con el espacio de nombres de archivos de Windows y la compatibilidad con las aplicaciones de Windows con los datos de archivos almacenados en SQL Server.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>FileTable permite que una aplicaci\u00f3n integre sus componentes de almacenamiento y administraci\u00f3n de datos, y proporciona servicios  integrados de SQL Server, que incluyen b\u00fasqueda de texto completo y b\u00fasqueda sem\u00e1ntica, sobre datos no estructurados y metadatos. En otras palabras, puede almacenar archivos y documentos en tablas especiales en<br>SQL Server llamadas FileTables, pero acceda a ellos desde las aplicaciones de Windows como si estuvieran almacenados en el sistema de archivos, sin realizar ning\u00fan cambio en las aplicaciones de sus clientes. La caracter\u00edstica FileTable se basa en la tecnolog\u00eda FILESTREAM de SQL Server.<\/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>FileStream en SQL Server<\/strong><\/p>\n\n\n\n<p><strong>Caracter\u00edsticas de FileStream de SLQ Server<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>FILESTREAM permite que las aplicaciones basadas en SQL Server almacenen datos no estructurados, como documentos e im\u00e1genes, en el sistema de archivos. <\/li><li>Las aplicaciones pueden aprovechar las valiosas API de transmisi\u00f3n y el rendimiento del sistema de archivos y, al mismo tiempo, mantener la  coherencia transaccional entre los datos no estructurados y los datos estructurados correspondientes.<\/li><li>FILESTREAM integra el Motor de base de datos del servidor SQL con un sistema de archivos NTFS o ReFS al almacenar datos de objetos binarios grandes (BLOB) varbinary (max) como archivos en el sistema de archivos.<\/li><li>Las instrucciones de Transact-SQL pueden insertar, actualizar, consultar, buscar y hacer una copia de seguridad de los datos de FILESTREAM.<\/li><li>Las interfaces del sistema de archivos Win32 proporcionan acceso continuo a los datos<\/li><li>FILESTREAM utiliza la memoria cach\u00e9 del sistema NT para almacenar datos de archivos en cach\u00e9, esto ayuda a reducir cualquier efecto que los datos de FILESTREAM puedan tener en el rendimiento del motor de base de datos. El grupo de b\u00faferes de SQL Server no se usa; por lo tanto, esta memoria est\u00e1 disponible para el procesamiento de consultas.<\/li><li>FILESTREAM no se habilita autom\u00e1ticamente cuando instala o actualiza SQL Server. Debe habilitar FILESTREAM utilizando el Administrador de configuraci\u00f3n de SQL Server y SQL Server Management Studio. Para usar FILESTREAM, debe crear o modificar una base de datos para contener un tipo especial de grupos de archivos. A continuaci\u00f3n, cree o modifique una tabla para que contenga una columna varbinary (max) con el atributo FILESTREAM. Despu\u00e9s de completar estas tareas, puede usar Transact-SQL y Win32  para administrar los datos de FILESTREAM.<\/li><\/ul>\n\n\n\n<p style=\"font-size:24px\"><strong>Pasos para configurar y utilizar FileStream<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>1. Habilitar los servicios de FileStream<\/strong><\/p>\n\n\n\n<p>En este paso debemos abrir el Administrador de configuraci\u00f3n de SQL Server. En el servicio del motor de base de datos, pulsar doble clic, se abre la ventana de propiedades.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__01.png\" alt=\"\" class=\"wp-image-1745\" width=\"745\" height=\"246\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__01.png 942w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__01-300x99.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__01-768x254.png 768w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><figcaption>Administrador de configuraci\u00f3n de SQL Server<\/figcaption><\/figure>\n\n\n\n<p>En la ventana de propiedades seleccionar la ficha FileStream<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__02.png\" alt=\"\" class=\"wp-image-1746\" width=\"538\" height=\"629\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__02.png 428w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__02-257x300.png 257w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/figure>\n\n\n\n<p><strong>Activar las casillas de verificaci\u00f3n<\/strong><br>Habilitar FILESTREAM para el acceso de Transact-SQL<br>Habilitar FILESTREAM para el acceso de E\/S de archivo<br>Escribir el nombre del recurso compartido de Windos, que por defecto es el nombre de la instancia.<br>Permitir que los clientes remotos tengan acceso a los datos de FILESTREAM.<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>2. Configurar el servidor para FileStream<\/strong><\/p>\n\n\n\n<p>En la ventana del explorador de onjetos de Microsoft SQL Server Management Studio,  pulsar bot\u00f3n derecho en la instancia a configurar e ir a propiedades, en la opci\u00f3n Avanzados, configurar el FILESTREAM para el acceso total.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__03.png\" alt=\"\" class=\"wp-image-1747\" width=\"692\" height=\"627\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__03.png 704w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__03-300x272.png 300w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/figure>\n\n\n\n<p><strong>Tambi\u00e9n se puede ejecutar el siguiente procedimiento<\/strong><br>EXEC sys.sp_configure N&#8217;filestream access level&#8217;, N&#8217;2&#8242;<br>GO<br>RECONFIGURE WITH OVERRIDE<br>GO<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>3. Configurar la base de datos para FileStream<\/strong><\/p>\n\n\n\n<p>Abrir la ventana de propiedades de la base de datos, luego en la p\u00e1gina<strong> Opciones <\/strong>configurar el nivel de acceso a Full. Las otras opciones son: Off y ReadOnly <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04.png\" alt=\"\" class=\"wp-image-1748\" width=\"717\" height=\"663\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04.png 821w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04-300x278.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04-768x711.png 768w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><\/figure>\n\n\n\n<p><strong>Tambi\u00e9n se puede configurar utilizando el siguiente c\u00f3digo.<\/strong><br>USE [master]<br>GO<br>ALTER DATABASE [Northwind]<br>SET FILESTREAM( NON_TRANSACTED_ACCESS = FULL )<br>WITH NO_WAIT<br>GO<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>4. Agregar un grupo de archivos para FileStream<\/strong><\/p>\n\n\n\n<p>En la base de datos se necesita un grupo de archivos que tenga la opci\u00f3n de FileStream habilitada, usando la base de datos Northwind, insertar un grupo y luego un archivo al grupo.<\/p>\n\n\n\n<p>USE [master]<br>GO<br>ALTER DATABASE [Northwind] ADD FILEGROUP [GrupoTablasArchivos] CONTAINS FILESTREAM<br>GO<\/p>\n\n\n\n<p>Agregar un archivo al grupo de archivos GrupoTablasArchivos, el archivo se crear\u00e1 en la carpeta ArchivosStream en la unidad C: (<a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=82\" target=\"_blank\">Ver Crear Bases de datos<\/a>)<br>xp_create_subdir &#8216;C:\\ArchivosStream&#8217;<br>go<br>Alter database Northwind<br>add file (name=&#8217;ArchivosStreamData&#8217;, filename = &#8216;C:\\ArchivosStream\\ArchivosStreamData.ndf&#8217;)<br>to filegroup [GrupoTablasArchivos]<br>go<br>En la carpeta donde se creo el archivo aparece un archivo con nombre FileStream.hdr que contiene los<br>metadatos que relacionan los registros insertados.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04a.png\" alt=\"\" class=\"wp-image-1750\" width=\"664\" height=\"342\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04a.png 756w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__04a-300x155.png 300w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/><\/figure>\n\n\n\n<p style=\"font-size:24px\"><strong>5. Especificar el directorio de FileStream<\/strong><\/p>\n\n\n\n<p><strong>Este directorio permitir\u00e1 compartir los archivos.<\/strong><br>ALTER DATABASE [Northwind] set Filestream<br>( DIRECTORY_NAME = N&#8217;ArchivosStream&#8217; ) WITH NO_WAIT<br>go<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>6. Comprobar si la base de datos Northwind permite y tiene activada la opci\u00f3n FileStream<\/strong><\/p>\n\n\n\n<p>Para visualizar las bases de datos que soportan FileStream y el directorio.<br>select DB_Name(database_id) As &#8216;Base de datos&#8217;, directory_name As &#8216;Carpeta FileStream&#8217; from sys.database_filestream_options<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__05.png\" alt=\"\" class=\"wp-image-1751\" width=\"552\" height=\"353\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__05.png 355w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__05-300x192.png 300w\" sizes=\"auto, (max-width: 552px) 100vw, 552px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p style=\"font-size:26px\"><strong>Creando una tabla con FileStream<\/strong><\/p>\n\n\n\n<p>Para poder utilizar una tabla y utilizar las opciones que provee FileStream de debe crear una con un identificador UniqueIdentifier y el campo con la propiedad FileStream debe ser de tipo varbinary(max)<\/p>\n\n\n\n<p><strong>Create Table dbo.TablaFileStream<br>(Codigo UniqueIdentifier RowGuidCol Not Null Unique,<br>Descripcion nvarchar(100),<br>Foto varbinary(max) filestream null)<br>on [Primary]<br>go<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Insertar registros en una tabla FileStream<\/strong><\/p>\n\n\n\n<p>Al insertar registros se especifican las im\u00e1genes o documentos usando OpenRowSet  (<strong><a href=\"https:\/\/manualsqlserver.com\/?p=627\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Insertar im\u00e1genes desde SQL Server Management Studio<\/a><\/strong>)<br>use Northwind<br>go<br>insert into TablaFileStream (Codigo, Descripcion, Foto)<br>select NEWID(), &#8216;Filtro PiWater Nikken&#8217;, *<br>from OpenRowset(Bulk &#8216;C:\\Fotos\\FiltroPiWater.jpg&#8217;, Single_Blob) As Foto<br>go<br>Ver los registros<br>Select * from TablaFileStream<br>go<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Restricciones en el uso de FileStream<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>No se puede usar Database Mirroring en las bases de datos  configuradas para soporte FILESTREAM<\/li><li>Las tablas temporales (en memoria) no pueden tener columnas con FILESTREAM habilitado.<\/li><li>FILESTREAM s\u00f3lo permite almacenar datos en vol\u00famenes de disco locales.<\/li><li>Las columnas computadas que hacen referencia a columnas FILESTREAM no se pueden indexar.<\/li><li>Las columnas FILESTREAM no soportan Transparent Data Encription (TDE)<\/li><li>FILESTREAM no se puede habilitar en SQL Server de 32 bits que se ejecutan sobre sistemas operativos Windows de 64 bits.<\/li><li>No se permite la creaci\u00f3n de estad\u00edsticas en columnas con FILESTREAM habilitado.<\/li><li>El \u00fanico nivel de aislaci\u00f3n (Isolation Level) soportado es el modo READ COMMITED cuando los datos de FILESTREAM son accedidos a trav\u00e9s de la API Win32<\/li><\/ul>\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:28px\"><strong>Crear la tabla tipo FileTable<\/strong><\/p>\n\n\n\n<p>Las tablas tipo FileTable permiten el manejo de archivos compartidos. Estos archivos se guardan en el recurso compartido de la instancia donde se especific\u00f3 el uso de FileStream. <\/p>\n\n\n\n<p>En la imagen siguiente podemos ver el recurso compartido.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__06.png\" alt=\"\" class=\"wp-image-1752\" width=\"712\" height=\"471\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__06.png 764w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__06-300x199.png 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/figure>\n\n\n\n<p>use Northwind<br>go<br>Create table Northwind.dbo.MisDocumentos AS FileTable<br>with (FileTable_Directory = &#8216;ArchivosStream&#8217;,<br>FileTable_Collate_fileName = database_default )<br>go<\/p>\n\n\n\n<p><strong>Se puede agregar archivos desde el Explorador de Windows en el recurso compartido de la instancia de SQL Server<br><\/strong>Agregar carpetas al FileTable<br>insert into MisDocumentos (name, is_directory)<br>values (&#8216;Fotografias&#8217;,1)<br>go<br>insert into MisDocumentos (name, is_directory)<br>values (&#8216;Videos&#8217;,1)<br>go<\/p>\n\n\n\n<p>Ver los datos del FileTable<br>select * from [dbo].[MisDocumentos]<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__08.png\" alt=\"\" class=\"wp-image-1753\" width=\"887\" height=\"472\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__08.png 814w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__08-300x160.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FileStream__08-768x409.png 768w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><figcaption>Carpetas y archivos del FileTable<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>FileTables y FileStream en SQL Server Tablas de Archivos en SQL Server La caracter\u00edstica FileTable brinda compatibilidad con el espacio de nombres de archivos de Windows y la compatibilidad con las aplicaciones de Windows con los datos de archivos almacenados en SQL Server.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1743\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1744,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[20,183,184],"class_list":["post-1743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esquemastablas","tag-create-table","tag-filestream","tag-filetable","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1743","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=1743"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1743\/revisions"}],"predecessor-version":[{"id":1754,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1743\/revisions\/1754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1744"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}