J'ai cette procédure stockée qui fonctionne bien;Procédure stockée T-SQL, utilisez une variable comme référence de table dans la requête
ALTER PROCEDURE [dbo].[currentCoForHiLo]
@CoKeyCode Char(50)
BEGIN
SET NOCOUNT ON;
CREATE TABLE ##WrkedOnCo(cKeyCode Char(50), DateInt Int, HighValu Int, LowValu Int)
CREATE CLUSTERED INDEX IDX_CI ON ##WrkedOnCo(DateInt)
INSERT INTO ##WrkedOnCo
SELECT KeyCode, DateAsInt, HighValu, LowValu
FROM EODValuesAU
WHERE KeyCode = @CoKeyCode;
END
La procédure a été d'obtenir des données d'une table EODValuesAU
.
J'ai maintenant plusieurs tables EODValuesAU
, EODValuesUS
, EODValuesUK
.
J'ai essayé de modifier le code à la suivante, mais la requête a maintenant des erreurs. Je veux utiliser une variable pour la table dans la requête. Y a-t-il un moyen de le faire? Voir le code modifié ci-dessous;
ALTER PROCEDURE [dbo].[currentCoForHiLo]
@CoKeyCode Char(50), @CounrtyCode Char(10)
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE ##WrkedOnCo(cKeyCode Char(50), DateInt Int, HighValu Int, LowValu Int)
CREATE CLUSTERED INDEX IDX_CI ON ##WrkedOnCo(DateInt)
INSERT INTO ##WrkedOnCo
SELECT KeyCode, DateAsInt, HighValu, LowValu
FROM 'EODValues' + @CountryCode
WHERE KeyCode = @CoKeyCode;
END
Pourquoi avez-vous pas un seul ' Table EODValues avec une colonne country * qui peut contenir des requêtes '' UK', 'US',' AU', et donc une simple requête normale? À l'heure actuelle, vous avez fait l'erreur d'incorporer des données "pouvant être interrogées" dans les * métadonnées * en les plaçant dans le nom de la table. –
vous ne pouvez pas utiliser d'expressions ou de variables comme nom de table. Il est préférable de créer un SQL dynamique si vous souhaitez utiliser des noms dynamiques. – Yeou
Pourquoi créez-vous et insérez-vous dans une table temporaire globale? Cela signifie que les appels simultanés à la procédure stockée peuvent échouer et que vous n'avez besoin d'aucune sorte de table temporaire dans le code affiché. –