[SQL 2012] FileTable . FullText . Semantic
Neste post irei falar sobre um novo recurso do SQL Server 2012, FileTable.
Filetables são user-tables especializadas, com o schema pré-definido para armazenar dados FILESTREAM, arquivos e pastas, além dos respectivos atributos.
Cada Filetable representa uma hierarquia de arquivos e diretórios, onde cada registro na tabela corresponde a um específico arquivo ou diretório.
Uma das características deste novo recurso é que ao mover um arquivo para um diretório pré especificado, um registro é criado na Filetable automaticamente.
Vamos para a parte prática:
PARTE 1 - CONFIGURAÇÃO DO SERVIDOR
Abra o SQL Server Configuration Manager e localize o serviço "SQL Server", vá em propriedades e localize a aba "FILESTREAM", marque as opções conforme a imagem abaixo:

Temos que configurar o nível de acesso do FILESTREAM, vamos utlizar o nível "Full access enabled"
use Master
PARTE 2 - CRIAÇÃO DO DATABASE E DA FILETABLE
Vamos criar um Database com o recurso FILESTREAM e também definir o diretório para o uso do FILESTREAM neste database.
CREATE DATABASE TesteFT
Para verificar a criação do database com as características do FILESTREAM, utilizamos o comando:
SELECT * FROM sys.database_filestream_options WHERE database_id=DB_ID('TesteFT')
Vamos criar nossa FileTable, especificando o nome da PK e de 2 Unique Key criadas automaticamente.
Estas especificações são opcionais porém acho mais organizado e melhor documentado.
USE TesteFT
OBS: Em alguns ambientes precisei usar a instrução "SET ANSI_NULLS ON" antes da criação da tabela
Para verificar a criação de uma FileTable utilize o comando: SELECT * FROM sys.filetables
Você pode visualizar o diretório de uma FileTable específica através do menu "Explore FileTable Directory"

SELECT name, file_type, cached_file_size FROM Arquivos

Para que o FullText reconheça o máximo filtros possíveis é necessário executar os comandos:
EXEC sp_fulltext_service 'load_os_resources', 1
Para verificar: select * from sys.fulltext_document_types
Caso seja necessário, você pode baixar o "Microsoft Office 2010 Filter Packs" no endereço: http://www.microsoft.com/download/en/details.aspx?id=17062
Vamos criar nosso catálogo FullText para que possamos fazer nossas pesquisas aos arquivos e seus conteúdos.
CREATE FULLTEXT CATALOG FTC_Arquivo
Antes de criar nosso índice, iremos criar uma "SEARCH PROPERTY LIST" para que possamos pesquisar também as propriedades de um arquivo (Autor, Título, tag, etc).
Para obter a lista de possíveis filtros acesse o link: http://msdn.microsoft.com/pt-br/library/ee677618.aspx
Funciona para as extensões .docx, .xlsx, .pptx
CREATE SEARCH PROPERTY LIST ArqPropriedades;
Para verificar:
SELECT property_name, property_set_guid, property_int_id FROM sys.registered_search_properties

Na criação do você pode especificar o idioma utlizado, basta consultar(select * from sys.fulltext_languages). Português do Brasil é o 1046
CREATE FULLTEXT INDEX ON Arquivos
Vamos fazer algumas pesquisas:
SELECT name Arquivo, file_stream.GetFileNamespacePath(1,1) Local
SELECT name Arquivo, file_stream.GetFileNamespacePath(1,1) Local
SELECT name Arquivo, file_stream.GetFileNamespacePath(1,1) Local

Vamos utilizar um novo recurso chamado Semanti Search, com ele podemos verificar ocorrencias dentro de um arquivo, comparar arquivos e outras funções.
Para começar precisamos instalar um database de semantica
Baixe o arquivo neste endereço: http://www.microsoft.com/downloads/details.aspx?familyid=67E1CEB5-5B3B-4002-B43F-7A2807E9DA5D&displaylang=pt-br
Instale na pasta indicada.
CREATE DATABASE semanticsdb
Vamos utilizar algumas funções:
SemanticKeyPhraseTable - Lista a quantidade de valores que aparecem com maior frequência dentro do arquivo.
SELECT name, keyphrase, AVG(score) AS score

DECLARE @ArqID uniqueidentifier
SELECT name ArquivoComparado, score Similaridade

Este recurso é uma novidade muito boa, principalmente para o pessoal que trabalha com GED.
Related articles
How to call a function inside my SQL Server?
Database function function and function
How to create an SQL to do multiple inserts in one statement?
Practical examples
Short: SQL Update using begin try and begin transaction
Commit and Rollback command
Getting the last 120 months of data from my database
how to do it in SQL language?
How to create a variable to use the IN clause SELECT query SQL?
Database code part
SQL Update using Try Catch
Na prática com exemplo real
Comando SQL Update usando Try Catch
Na prática e no database
SELECT Format Date Time for many countries
It is a good tip to use day by day
Creating a SiteMap using SQL Database
Como indexar melhor meu site e links?
Transformando linhas em colunas usando SQL Server
veja como funciona
Ozimar Henrique