Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można wstawić wartości NULL do kolumny „USERNAME”, tabeli „tempdb.dbo.#temptable error”

Najpierw skomentuj deklarację @USERNAME w początkowym BEGIN zablokuj

 -- DECLARE @USERNAME varchar(110)

następnie obsłuż NULL wartość dla USERNAME jak w SELECT * INTO zablokuj

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

Następnie dodaj @USERNAME w KURSORZE jako

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

Następnie @USERNAME nie wyrzuci NULL błąd

AKTUALIZUJ :Na podstawie Twoich komentarzy zaktualizowałem odpowiedź:

Chcesz więc otrzymać @USERNAME na podstawie U_datetime >= @As_ONDATE stan.

Użyj więc istniejącego kodu i dodaj jeszcze jeden blok wewnątrz KURSORA, aby uzyskać @USERNAME wartość jak po 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę utworzyć skrypt kopii zapasowej z diagramu w SQL Server?

  2. Wdrażanie usług SSIS:Ustawienia aplikacji na żywo w fazie deweloperskiej

  3. SQL:klauzula IF w klauzuli WHERE

  4. Za mało pamięci systemowej w puli zasobów „wewnętrzna”

  5. 5 sposobów na uzyskanie skróconej nazwy miesiąca z daty w SQL Server