2009-09-06 7 views
0

J'ai certaines requêtes SQL Compact qui créent des tables dans la transaction. C'est principalement parce que j'ai besoin de simuler des tables temporaires, que SQL Compact ne supporte pas. Je fais cela en créant une vraie table, puis en la déposant à la fin de la transaction.Sql Compact et __sysobjects

Cela fonctionne principalement. Parfois, cependant, lors de la création des tables, Sql Compact va essayer d'acquérir des verrous au niveau PAGE sur la table __sysobjects. Si plusieurs requêtes simultanées sont en cours d'exécution pour créer des tables "temp", la tentative d'acquisition d'un verrou de page peut entraîner un verrou mort suivi d'une exception SqlLockTimeout.

Pour les tables normales, je pourrais corriger cela en utilisant un indice "with (rowlock)". Cependant, parce que je n'écris pas la requête à insérer dans __sysobjets (SQL Server le fait en réponse à "create table") je ne peux pas le faire.

Est-ce que quelqu'un sait d'une manière que je pourrais contourner ceci?

J'ai pensé à retirer la création de table de la transaction, mais cela ouvre la possibilité de tables temporaires fantômes que je devrais ensuite nettoyer régulièrement. Idéalement, j'aimerais éviter cela si possible.

Répondre

-1

Je pense que vous êtes lié à des problèmes de concurrence avec la création de tables régulières au lieu de tables #temp.

Je n'avais aucune idée que l'édition SQL Server Compact ne vous permet pas de créer des tables #Temp.

Pourquoi ne pas utiliser les variables de tableau à la place? Cela fonctionnera-t-il pour vous?

+0

Malheureusement pas. SQL compact ne prend pas en charge les variables de table non plus. –

Questions connexes