Je veux utiliser le résultat de CTE avec des valeurs constantes pour insérer dans une table
;With CTE as ( select distinct client_user_id from profiles.client_users_data where signal_name = 'Level' and signal_value in (1, 2, 3, 4, 5) and client_user_id not in (select distinct client_user_id from [profiles].[client_user_mapping]) ) insert into [profiles].[client_user_mapping] (786 as client_id, newid() as da_user_id, client_user_id from CTE);
4 Réponses :
Utiliser insérer. . . Sélectionnez CODE>:
With CTE as (
select distinct ud.client_user_id
from profiles.client_users_data ud
where ud.signal_name = 'Level' and
ud.signal_value in (1, 2, 3, 4, 5) and
not exists (select distinct
from [profiles].[client_user_mapping] um
where um.client_user_id = ud.client_user_id
)
)
Honte à tous les deux. Les meilleures pratiques sont de toujours fournir une liste de colonnes pour l'instruction insertion.
@Smor. . . Je vous entends et j'ai modifié la réponse.
Juste parce que c'est un CTE ne change pas la syntaxe de l'insertion code> code>. C'est toujours insérer dans ... Sélectionnez ... à partir de Code>:
WITH CTE AS
(SELECT DISTINCT
client_user_id
FROM profiles.client_users_data
WHERE signal_name = 'Level'
AND signal_value IN (1, 2, 3, 4, 5)
AND client_user_id NOT IN (SELECT DISTINCT client_user_id FROM [profiles].[client_user_mapping]))
INSERT INTO [profiles].[client_user_mapping]
SELECT 786 AS client_id,
NEWID() AS da_user_id,
client_user_id
FROM CTE;
Honte à tous les deux. Les meilleures pratiques sont de toujours fournir une liste de colonnes pour l'instruction insertion.
Le problème est, @smor, est que nous ne savons pas ce que sont les noms de ces colonnes dans la table de l'OP [Profils]. [Client_user_mapping] code>.
SQL Server Attendez-vous à toutes les valeurs dans l'ordre correct dans CTE. Donc, pour atteindre la tâche, la requête correcte sera la suivante:
Sélectionnez * CODE> est diabolique. Vous devriez avoir honte de vous. :)
La déclaration CTE semble bonne, votre instruction insertion a besoin de modifier quelque chose comme ceci:
INSERT INTO [profiles].[client_user_mapping](client_id, da_user_id, client_user_id) SELECT 786, newid(), client_user_id FROM CTE