2010-04-07 9 views
3

Je comprends que je peux changer une table SQL en utilisant la sp suivante:Append nom de la table SQL avec la date d'aujourd'hui

EXEC sp_rename 'customers', 'custs' 

Comment pourrais-je aller sur annexant cela pour que la nouvelle table a la date d'aujourd'hui comme suffixe?

J'ai essayé des variations sur le thème ci-dessous avec peu de succès !!

EXEC sp_rename 'customers', 'customers +(CONVERT(VARCHAR(8),GETDATE(),3))' 

Toute aide grandement appréciée.

+1

Puis-je demander _why_ que vous cherchez à faire cela? En règle générale, je suggère de mettre un champ dans la table contenant la date et en gardant tout dans un est généralement préférable d'encoder des données dans le nom de la table et nécessitant une grande déclaration UNION pour lire les données à travers les tables. – eftpotrm

Répondre

5

Cela ressemble à une très mauvaise chose à faire! vous devriez évaluer votre conception, en renommant vos tables avec des dates dans les noms suggère que vous ferez beaucoup de tables, chacune pour une date différente. Vous pouvez éventuellement ajouter une colonne de date dans votre table et l'utiliser pour différencier les données au lieu de créer des tables entièrement nouvelles pour des dates différentes. Cela signifie que vous ne pouvez pas avoir une expression en tant que paramètre d'une procédure stockée dans SQL Server. En essayant de concaténer la date formatée à la chaîne 'clients', vous essayiez de passer une expression en paramètre.

vous devez stocker l'expression dans une variable locale d'abord, puis appeler la procédure stockée avec cette variable locale:

DECLARE @Value varchar(500) 
SET @Value='customers' +(CONVERT(VARCHAR(8),GETDATE(),3)) 
EXEC sp_rename 'customers', @Value 
+0

Je vous avais fait un million de fois si je pouvais, c'est généralement un très mauvais choix. – HLGEM

+0

Merci pour le conseil KM, pris note de et je vais probablement modifier la conception et mettre en œuvre quelque chose dans le sens de ce que vous avez suggéré, c'est un timbre dateur dans la table. Mon seul souci avec ceci est que cette table deviendra grande ... très très grande. En plus de cela, mon LINQ to SQL devra être modifié et je ne suis pas sûr à l'heure actuelle comment je peux modifier cela afin que seul le dernier 'client' soit pris sur la base de l'horodatage. Hmmm ... matière à réflexion. Vous pouvez voir quelques autres questions à venir bientôt! –

+0

@ 8forty, si vous avez une table, vous pouvez facilement interroger en fonction de 'Column = 'Value'' sans drame sur le nom de la table, comme ils étaient censés être. Configurez l'index approprié et il sera rapide quel que soit le nombre de lignes. Si vous divisez la table et que vous la renommez avec la date dans le nom, vous allez constamment créer un SQL dynamique pour interroger vos données. Vous obtiendrez des échecs de compilation lorsque vous créez un nom de table qui n'existe pas. Il sera impossible d'avoir des clés étrangères. Vous aurez des UNIONs fous pour accéder aux données qui s'étendent sur une journée. Posez cette question comme une vraie question et non comme un commentaire. –

1
DECLARE @TableName varchar(50) 

SELECT @TableName = (SELECT 'Customers_' + convert(varchar(50),GetDate(),112)) 

EXEC sp_rename 'customers', @TableName 
+0

Je ne peux pas encore répondre avec une tique, mais c'est sur Jon ... Merci beaucoup. –

+0

@ Ricardo Deano - Pas de problème assurez-vous d'accepter la réponse si cela fonctionne. – JonH

2

Vous voulez dire T-SQL, n'est-ce pas? Déplacez les fonctions en dehors des guillemets simples. Quelque chose comme:

EXEC sp_rename 'customers', 'customers' +(CONVERT(VARCHAR(8),GETDATE(),3)) 
0

Puisque vous devriez presque jamais le faire sur une telle base régulière que vous avez besoin de sur la date par programme, je suggère cela pour l'utilisation occasionnelle:

EXEC sp_rename 'customers', 'customers20100408' 
+1

si vous alliez recommander un format de date, pourquoi ne pas YYYYMMDD: 'customers20100408'? –

+1

@KM, je l'ai réparé, vous avez raison la date sans équivoque est meilleure. – HLGEM

Questions connexes