J'ai l'instruction d'exécution suivante qui crée une table (en utilisant les données d'une autre procédure), insère les valeurs dans une table temporaire, ajoute une colonne d'image (car elles ne peuvent pas être inclus dans le groupe), et le met à jour en fonction des critères d'une autre table temporaire (les champs de table résultant est donc utilisé dans un rapport de SSRS, donc je dois retenir le type de données d'image):La vérification de l'existence d'une colonne dans une table temporaire retourne toujours false dans SQL Server
EXEC ('SELECT ' + @COL_TO_GROUP_BY + @COL_ADDITONAL + @sColVals + ' INTO
#RESULTS_TABLE from (' + @SQL_STATEMENT + ') A ' + @WHERE_CLAUSE + ' GROUP BY ' +
@COL_TO_GROUP_BY +
' ALTER TABLE #RESULTS_TABLE
ADD IMAGE_DATA IMAGE
IF EXISTS(SELECT * FROM tempdb.INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME =
''COLUMN_A'' and TABLE_NAME LIKE ''#RESULTS_TABLE%'')
BEGIN
UPDATE #RESULTS_TABLE
SET IMAGE_DATA = FILE_DATA
FROM #RESULTS_TABLE A, #IMAGE_TABLE B
WHERE A.COLUMN_A = B.COLUMN_A
END
SELECT * FROM #RESULTS_TABLE')
le problème est que, que COLUMN_A existe ou non, la colonne pour IMAGE_DATA est toujours NULL. Existe-t-il un autre moyen d'obtenir des données dans la colonne IMAGE_DATA? S'il vous plaît aider!
Note: Je vais pas accepter toutes les réponses qui concluent que le problème est lié au contenu d'autres tables, plus précisément de la clause WHERE. J'ai fait plusieurs validations pour m'assurer que les conditions peuvent être vraies et fausses (lignes correspondantes, pas de lignes correspondantes, etc.). Donc, cela exclut l'énoncé conditionnel. Merci.
EDIT:
Je ne suis toujours pas tout à fait sûr de ce que la cause exacte de c'était, mais je fini par créer une table temporaire globale et couru deux procédures distinctes, maintenant il semble fonctionner très bien. J'ai dû accepter la réponse qui correspondait le mieux à ma propre solution. Toutes les réponses et les commentaires étaient très viables. Merci!
Tout d'abord je voudrais essayer d'omettre la condition 'WHERE A.COLUMN_A = B.IMAGE_VALUE' il me semble que cela suffit pour trouver la bonne ligne par' OBJ_ID' –
Merci d'avoir signalé cela. Dans mon cas, j'ai besoin d'avoir les deux conditions parce qu'il y a des lignes avec des OBJ_ID en double. J'ai simplifié mon code original et j'aurais dû le retirer aussi car cela semble trompeur. Je vais éditer la question. –
Je ne sais pas si cela aide, mais je pense que vous pouvez ajouter la colonne image dans votre instruction select comme ceci 'cast (null comme image) comme IMAGE_DATA' sans avoir à l'ajouter à la clause group by car c'est une constante. BTW, pourquoi avez-vous besoin de tester si la colonne existe? –