Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Es können keine NULL-Werte in Spalte „USERNAME“, Tabelle „tempdb.dbo.#temptable error

Kommentieren Sie zunächst die @USERNAME-Deklaration im einleitenden BEGIN blockieren

 -- DECLARE @USERNAME varchar(110)

behandeln Sie dann den NULL Wert für USERNAME wie in SELECT * INTO blockieren

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

Fügen Sie dann den @USERNAME hinzu im CURSOR als

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

Dann der @USERNAME wird NULL nicht werfen Fehler

AKTUALISIEREN :Basierend auf Ihren Kommentaren habe ich die Antwort aktualisiert:

Sie möchten also den @USERNAME erhalten basierend auf U_datetime >= @As_ONDATE Zustand.

Verwenden Sie also Ihren vorhandenen Code und fügen Sie einen weiteren Block innerhalb des CURSORs hinzu, um den @USERNAME zu erhalten Wert wie nach 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