Utilisation de SQl Server 2000 J'ai une procédure stockée qui joint deux tables et renvoie ensuite les données. Je veux que sp puisse le faire pour n'importe quel nom de table que je lui passe, sinon j'aurai exactement le même code à l'exception du nom de la table 20 fois dans une instruction géante if. Fondamentalement, comment puis-je utiliser une variable pour pointer vers une table, ou est-ce autorisé? Merci.Table SQL "Pointeur"?
Répondre
Vous devez SQL dynamique, commencez ici The Curse and Blessings of Dynamic SQL d'apprendre comment le faire correctement afin que personne ne tombe à vos tables ou ne fait rien d'autre possible avec SQL Injection
Essayez de générer le SELECT en tant que chaîne, puis en appelant EXEC et en transmettant la chaîne.
par exemple.
declare @sql varchar(500)
set @sql = 'select whatever from ' + @tableName
exec @sql
un proc à tout faire est généralement une mauvaise mauvaise idée . 20 tables possibles que je pourrais avoir besoin d'aller selon les circonstances indiquent presque toujours une conception de base de données qui est mauvaise. Lire l'article Denis posté sur les malédictions et les bénédictions de SQL dynamique.
Certaines colonnes de chaque table sont cohérentes et c'est ce que je tire. Serait-il préférable d'avoir 20 déclarations if? – Shawn
Si j'avais cinq colonnes qui étaient les mêmes dans 20 tables, je les retirerais sur une table parent séparée. C'est ce que je veux dire par rapport à la mauvaise conception de votre base de données. – HLGEM
Peut-être, mais cela ne fonctionnerait pas avec la façon dont j'affiche les données et les mise à jour. – Shawn
Valide, mais risqué: http://xkcd.com/327/ –