-1
votes

Comment insérer le résultat de CTE dans une table avec des valeurs constantes pour certaines colonnes

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);


0 commentaires

4 Réponses :


2
votes

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
                       )
     )


2 commentaires

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.



2
votes

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;


2 commentaires

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] .



0
votes

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: xxx


1 commentaires

Sélectionnez * est diabolique. Vous devriez avoir honte de vous. :)



1
votes

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


0 commentaires