【发布时间】:2016-10-12 03:58:58
【问题描述】:
我有一个 SP。执行时出现错误
无法将值 NULL 插入到列 'USERNAME'、表 'tempdb.dbo.#temptable________________________________________________________________________________________________________0000000002FD';列不允许空值。更新失败。 声明已终止。
下面是我的SP
ALTER PROCEDURE [dbo].[UserReportData]
@As_ONDATE Datetime
AS
BEGIN
DECLARE @REPORTDATE datetime
DECLARE @USERNAME varchar(110)
Select * INTO #temptable
FROM
(
select a.CUser_id, b.User_Id, a.U_datetime
as REPORTDATE, b.first_Name + ' ' + b.last_name as USERNAME
from inward_doc_tracking_trl a inner join user_mst b
on a.CUser_id = b.mkey
and a.U_datetime >= @As_ONDATE
) as x
DECLARE Cur_1 CURSOR
FOR SELECT CUser_id, User_Id FROM #temptable
OPEN Cur_1
DECLARE @CUser_id INT
DECLARE @User_Id INT
FETCH NEXT FROM Cur_1
INTO @CUser_id, @User_Id
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @REPORTDATE = U_datetime FROM inward_doc_tracking_trl
where U_datetime >= @As_ONDATE
UPDATE #temptable
SET REPORTDATE = @REPORTDATE,
USERNAME = @USERNAME
WHERE CUser_id = @CUser_id
AND User_Id = @User_Id
FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id
END
CLOSE Cur_1
DEALLOCATE Cur_1
SELECT * FROM #temptable
DROP TABLE #temptable
END
更新程序
ALTER PROCEDURE [dbo].[UserReportData]
@As_ONDATE Datetime
AS
BEGIN
DECLARE @REPORTDATE datetime
DECLARE @USERNAME varchar(110)
Select * INTO #temptable
FROM
(
select a.CUser_id, b.User_Id, a.U_datetime
as REPORTDATE, ISNULL(b.first_Name, '') + ' ' + ISNULL(b.last_name, '') AS USERNAME
from inward_doc_tracking_trl a inner join user_mst b
on a.CUser_id = b.mkey
and a.U_datetime >= @As_ONDATE
) as x
DECLARE Cur_1 CURSOR
FOR SELECT CUser_id, User_Id FROM #temptable
OPEN Cur_1
DECLARE @CUser_id INT
DECLARE @User_Id INT
--DECLARE @USERNAME VARCHAR (100)
FETCH NEXT FROM Cur_1
INTO @CUser_id, @User_Id
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @REPORTDATE = U_datetime FROM inward_doc_tracking_trl
where U_datetime >= @As_ONDATE
SELECT @USERNAME = ISNULL(b.first_Name, '') + ' ' + ISNULL(b.last_name, '')
FROM inward_doc_tracking_trl a
INNER JOIN user_mst b on a.CUser_id = b.mkey
where a.U_datetime >= @As_ONDATE
UPDATE #temptable
SET REPORTDATE = @REPORTDATE,
USERNAME = @USERNAME
WHERE CUser_id = @CUser_id
AND User_Id = @User_Id
FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id
END
CLOSE Cur_1
DEALLOCATE Cur_1
SELECT * FROM #temptable
DROP TABLE #temptable
END
【问题讨论】:
-
您没有将 ant 值设置为
@USERNAME -
@Arulkumar:是的,但是如何设置它
-
和其他游标变量一样
-
@Arulkumar:在设置值时我收到错误
Incorrect syntax near 'USERNAME'.这是我尝试过的SELECT @USERNAME = b.first_Name + ' ' + b.last_name USERNAME from inward_doc_tracking_trl a inner join user_mst b on a.CUser_id = b.mkey and a.U_datetime >= @As_ONDATE -
@IvanStarostin:我像上面一样尝试过,但得到错误
Incorrect syntax near 'USERNAME'.
标签: sql sql-server stored-procedures sql-server-2005