Pergunta

banco de dados enorme no MSSQL2005 com grande base de código, dependendo da estrutura do banco de dados.

Eu tenho cerca de 10 tabelas semelhantes todos eles contêm o nome do arquivo ou o caminho completo para o arquivo. O caminho completo é sempre dependente do artigo ID de modo que não faz sentido para armazená-lo no banco de dados. Obtendo dados úteis a partir dessas tabelas vai um pouco como isto:

SELECT a.item_id
, a.filename
FROM (
    SELECT id_item AS item_id
    , path AS filename
    FROM xMedia

    UNION ALL

    -- media_path has a different collation
    SELECT item_id AS item_id
    , (media_path COLLATE SQL_Latin1_General_CP1_CI_AS) AS filename
    FROM yMedia

    UNION ALL

    -- fullPath contains more than just the filename
    SELECT itemId AS item_id
    , RIGHT(fullPath, CHARINDEX('/', REVERSE(fullPath))-1) AS filename
    FROM zMedia

    -- real database has over 10 of these tables
) a

Eu gostaria de criar uma visão única de todas essas tabelas para que o novo código usando este desastre de dados não precisa saber sobre todas as diferentes tabelas de mídia. Eu também gostaria de usar essa exibição para inserir e atualizar declarações. Obviamente código antigo ainda contar com as tabelas para ser atualizado.

Depois de ler a página do MSDN sobre criação de pontos de vista em MSSQL2005 Eu não acho que uma exibição com SCHEMABINDING seria suficiente.

Como eu poderia criar uma visão tão atualizável?

Este é o caminho certo a seguir?

Foi útil?

Solução

Você pode modificar vistas particionado, desde que satisfaçam determinadas condições.

Estas condições incluem ter um partitioning column como uma parte da chave primária em cada tabela, e tendo um conjunto em que não se sobrepõe restrições de verificação para a coluna de particionamento.

Este não parece ser o seu caso.

No seu caso, você pode fazer qualquer um dos seguintes:

  • Recriar você tabelas como de visualizações (com colunas computadas) para o seu legado macio para o trabalho, e referem-se a toda a tabela da nova macia
  • Use gatilhos INSTEAD OF para atualizar as tabelas.

Outras dicas

Role para baixo na página que você ligado e você verá um parágrafo sobre as visões atualizáveis. Você não pode atualizar uma visão baseada em sindicatos, entre outras limitações. A lógica por trás disso é provavelmente simples, como deve Sql Server decidir sobre o que a tabela de origem / vista devem receber a atualização / inserir?

Se uma vista é baseado em várias tabelas de base, instrução UPDATE na visão pode ou não funcionar, dependendo do instrução UPDATE. Se a instrução UPDATE afeta várias tabelas base, servidor SQL gera um erro. Considerando que, se a actualização afecta apenas uma tabela base na vista, em seguida, a actualização irá trabalhar (Não corretamente sempre). As demonstrações inserir e excluir sempre falhará.

Em vez de gatilhos, são usados ??para corretamente UPDATE, inserção e exclusão de uma visão que é baseado em várias tabelas base. Os links a seguir tem exemplos, juntamente com um tutorial em vídeo sobre o mesmo.

EM VEZ DE INSERÇÃO Gatilho
EM VEZ DE ATUALIZAÇÃO gatilho
em vez de eliminar gatilho

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top