2009-07-27 5 views
2

J'ai un objet article avec les propriétés suivantes:Quelle approche dois-je prendre pour séparer une chaîne et mettre à jour plusieurs tables SQL?

  • Article Nom (varchar)
  • Corps de l'article (varchar)
  • Article Tags (varchar)

L'article balises est une Chaîne délimitée par des espaces de valeurs de texte qu'un utilisateur a tagué avec l'objet. Les 3 propriétés sont passées à une procédure stockée.

Je veux maintenant faire ce qui suit:

1) Insérer l'article Nom et Corps de l'article dans la table dbo.Articles et retourner l'identifiant de l'article

2) Insérez chaque valeur de la Article Tags chaîne dans la table dbo.Tags comme une ligne séparée, mais d'abord vérifier les doublons. Si dupliquer puis retourner le tagid d'enregistrement existant, si nouveau record puis retourner la nouvelle tagid

3) insérer l'identifiant de l'article et chaque tagid comme une ligne distincte dans le tableau dbo.TagMap

J'ai besoin de Connaître la meilleure approche de la façon dont j'accomplirais cela, étant également conscient que cela ne coûte pas trop cher en performance.

Merci d'avance pour toute aide que vous pouvez fournir.

+0

Quelle langue et quel SGBD utilisez-vous? –

+0

asp.net 3.5/vb.net et sql server 2008 – Cunners

+0

Avez-vous besoin que cela soit fait dans la base de données via une procédure de stockage ou cela peut-il être un code .net? – jvanderh

Répondre

4

Je ferais la plupart du travail dans votre application plutôt que dans sql. Vous pouvez utiliser l'une des nombreuses routines de split SQL trouvées en ligne avec CROSS APPLY pour ajouter plusieurs lignes à vos tables, mais je ne le ferais pas. Restez simple et demandez à votre application de gérer les insertions de tags.

Disons que vous avez un article avec 5 balises. C'est un appel de base de données pour créer l'article et renvoyer l'ID d'article à votre application (étape # 1 de votre question). Ensuite, pour chaque tag, vous fournissez l'ID article et la valeur de tag dans un appel de base de données séparé. 2 et l'étape # 3. Vous regardez 6 opérations très rapides et pas compliquées pour un article qui a très probablement un nombre de tags supérieur à la moyenne. Ce n'est vraiment pas si mal.

Mais c'est juste mes deux cents. J'espère que ça aide.

+0

Je suis d'accord, vous devriez faire le gros du travail dans l'application elle-même.Je pense que vous pouvez ajouter tous les tags dans un seul appel de base de données. – configurator

2

Personnellement, je passerais les balises au format XML au lieu d'une chaîne brute. Mais, je préfère de loin la capacité xquery de SQL Server que l'analyse de chaîne TSQL brute. Le type d'approche dont je parle est brièvement décrit dans Passing lists to SQL Server 2005 with XML Parameters. Le reste est standard "insert if not exists" logic. Il y a un peu plus à ce sujet dans SQL Server: Best way to Update row if exists, Insert if not. Ils traitent des mises à jour, mais la logique est similaire.

Questions connexes