Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Không thể chèn giá trị NULL vào cột 'USERNAME', bảng 'tempdb.dbo. # Lỗi tạm thời

Đầu tiên hãy nhận xét khai báo @USERNAME trong BEGIN ban đầu khối

 -- DECLARE @USERNAME varchar(110)

sau đó xử lý NULL giá trị cho USERNAME như trong SELECT * INTO khối

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

Sau đó, thêm @USERNAME trong CURSOR với tư cách là

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

Sau đó, @USERNAME sẽ không ném NULL lỗi

CẬP NHẬT :Dựa trên nhận xét của bạn, tôi đã cập nhật câu trả lời:

Vì vậy, bạn muốn lấy @USERNAME dựa trên U_datetime >= @As_ONDATE điều kiện.

Vì vậy, hãy sử dụng mã hiện có của bạn và thêm một khối nữa bên trong CURSOR để nhận @USERNAME giá trị sau 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. Hiểu về hiệu suất của một vai trò ứng dụng trong SQL với ASN.NET

  2. Tránh 4 sai lầm DBA phổ biến này

  3. Lỗi tràn số học khi chuyển đổi biểu thức thành kiểu dữ liệu ngày giờ

  4. Các cách khác nhau để so sánh lược đồ và dữ liệu bảng SQL Server

  5. không thể mở được vì nó là phiên bản 706. Máy chủ này hỗ trợ phiên bản 662 trở về trước. Đường dẫn hạ cấp không được hỗ trợ