2010-07-19 5 views
0

J'ai besoin d'une requête qui va modifier une seule colonne de nvarchar (max) à 32. Le vrai problème est que cette table a 800 000 lignes. Et mon alter table myTable alter colonne mycolumn expire. Des suggestions ou des astuces?Les colonnes de conversion SQL expirent

+1

Modifiez le délai d'expiration. –

+1

Pourquoi avez-vous marqué ceci comme C# et non sql-server? Aussi, est-ce SQL Server, Oracle, MySQL? Besoin de plus d'informations. –

+0

Son SQL Server en raison de nvarchar (max) – gbn

Répondre

3

Peut-être ajouter une nouvelle colonne, puis en sélectionnant les données dans la nouvelle colonne, puis supprimer l'ancienne colonne et renommer la nouvelle colonne avec le nom d'origine aidera.

Une autre approche plus simple consisterait à créer une nouvelle table avec les spécifications si nécessaire, puis de sélectionner .. dans. Une fois cette opération terminée, l'ancienne table peut être supprimée.

+0

je ne peux pas supprimer la table –

+0

mais vous pouvez supprimer toutes les lignes/tronquer? – codymanix

0

Voir this.

Vous pouvez également spécifier le compteur de délai d'attente ou simplement désactiver via l'interface graphique.

1

Deux choses que je peux penser à essayer:

d'abord faire
  • un UPDATE tronquer les données à 32 caractères; ce pourrait aider le ALTER s'exécuter plus rapidement, car il n'aura pas à faire de troncature lui-même. Le UPDATE pourrait être groupé si nécessaire

Ou

  • Créer une nouvelle nvarchar(32) colonne avec un nom temporaire
  • que vous le remplissiez de la colonne nvarchar(max)
  • DROP la colonne nvarchar(max)
  • Renommez le Colonne (32) au nom d'origine de la colonne (max)
2

Si vous exécutez un script SQL dans SSMS, aucun délai d'attente n'est défini. Vous pouvez seulement obtenir un timeout en utilisant C# etc, et c'est le CommandTimeout par défaut de 30 secondes.

Je suggère de changer le timeout à 3600 par exemple, ou l'exécuter dans SSMS.

L'autre chose à penser de: ce changement sera enregistré afin qu'il puisse revenir en arrière. Assurez-vous de redimensionner le fichier journal à une taille respectable afin qu'il n'ait pas à croître de 10% à chaque fois (lorsque les modifications que vous effectuez utilisent l'espace de journalisation actuel).

Ou combiner avec la réponse de codymanix

0

Lorsque vous exécutez l'instruction, ouvrez une autre copie de SSMS et exécutez l'instruction

sp_who2 

qui va vous montrer, entre autres, une colonne appelée " BlkBy ". C'est le SPID d'un processus qui peut bloquer votre requête. Vous pouvez avoir une transaction ouverte ailleurs dans le système. Si vous savez ce qu'est ce processus, et vous savez qu'il ne fera pas exploser votre univers, tuez-le.