Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible d'insérer des valeurs NULL dans la colonne 'USERNAME', table 'tempdb.dbo.#temptable error

Commencez par commenter la déclaration @USERNAME dans le BEGIN initial bloquer

 -- DECLARE @USERNAME varchar(110)

puis gérez le NULL valeur pour le USERNAME comme dans le SELECT * INTO bloquer

 ISNULL(b.first_Name, '') + ' ' + ISNULL(b.last_name, '') AS USERNAME

Ajoutez ensuite le @USERNAME dans le CURSEUR comme

DECLARE Cur_1 CURSOR
        FOR SELECT CUser_id, User_Id, USERNAME FROM #temptable

            OPEN Cur_1
                    DECLARE @CUser_id INT
                    DECLARE @User_Id INT
                    DECLARE @USERNAME VARCHAR (200) -- can set your required length
                    FETCH NEXT FROM Cur_1 
                    INTO @CUser_id, @User_Id

Puis le @USERNAME ne lancera pas le NULL erreur

MISE À JOUR  :Sur la base de vos commentaires, j'ai mis à jour la réponse :

Donc, vous voulez obtenir le @USERNAME basé sur U_datetime >= @As_ONDATE état.

Utilisez donc votre code existant et ajoutez un bloc supplémentaire à l'intérieur du CURSEUR pour obtenir le @USERNAME valeur comme après le SELECT @REPORTDATE = U_datetime FROM inward_doc_tracking_trl where U_datetime >= @As_ONDATE

SELECT @USERNAME = ISNULL(b.first_Name, '') + ' ' + ISNULL(b.last_name, '') -- no need of column alias here
FROM inward_doc_tracking_trl a 
INNER JOIN user_mst b on a.CUser_id = b.mkey 
WHERE a.U_datetime >= @As_ONDATE