[英]Invalid column name 'filter' error in SQL Server
我收到一种奇怪的错误。 我说这很奇怪,因为我不明白为什么会收到该错误。 我想这里有语法错误,但由于它看起来正确,所以我无法完全得到该错误。
我收到的错误是在我创建的SQL Server过程中。 在以下过程中,我在以下部分中遇到错误。
INSERT INTO agentids (filter, agentid)
SELECT
filter
,agentid
FROM selected_agents sa
WHERE sa.agentname = @p_agentname
AND sa.agentloginid = @p_agentloginid;
如果删除上述插入语句 ,则可以编译该过程。 我知道筛选器是内置SQL Server变量,但是我在过程中的其他位置使用了它,并且如果删除了插入语句部分,它将正确执行
更新说明:我错过了前面提到的内容,但是如果我执行此过程,因为它是“ master”数据库,它将成功编译。
CREATE PROCEDURE [dbo].[getAgentLogActivity] @p_agentname NVARCHAR(50),
@p_agentloginid NVARCHAR(50),
@p_startTime DATETIME,
@p_endTime DATETIME
AS
BEGIN
DECLARE @l_event_login SMALLINT
DECLARE @l_event_logout SMALLINT
DECLARE @l_eventtype SMALLINT
DECLARE @l_reasoncode SMALLINT
DECLARE @l_agentid INT
DECLARE @l_eventdatetime DATETIME
DECLARE @l_filter BIT
DECLARE @l_mineventdatetime DATETIME
DECLARE @l_maxeventdatetime DATETIME
DECLARE @SWV_cursor_var1 CURSOR
SET @l_event_login = 1
SET @l_event_logout = 7
DELETE FROM agentids
INSERT INTO agentids (filter, agentid)
SELECT
filter
,agentid
FROM selected_agents sa
WHERE sa.agentname = @p_agentname
AND sa.agentloginid = @p_agentloginid;
DELETE FROM temp_asdr1
INSERT INTO temp_asdr1(agentid, eventtype, eventdatetime, reasoncode)
SELECT
asdr.agentid
,asdr.eventtype
,asdr.eventdatetime
,asdr.reasoncode
FROM
agentstatedetail asdr
,agentids ai
WHERE asdr.agentid = ai.agentid
AND asdr.eventdatetime BETWEEN @p_startTime AND @p_endTime
AND asdr.eventtype IN(@l_event_login,@l_event_logout)
UPDATE temp_asdr1
SET filter = (SELECT
filter
FROM agentids ai
WHERE ai.agentid = temp_asdr1.agentid)
DELETE FROM temp_asdr
--alter sequence temp_asdr_seq
SELECT
@l_mineventdatetime = min(eventdatetime)
,@l_maxeventdatetime = max(eventdatetime)
FROM temp_asdr1
WHERE filter = 1
EXECUTE dbo.sp_executesql 'l_mineventdatetime'
,@l_mineventdatetime
EXECUTE dbo.sp_executesql 'l_maxeventdatetime'
,@l_maxeventdatetime
IF @@rowcount = 0
BEGIN
SELECT
@l_mineventdatetime = NULL
,@l_maxeventdatetime = NULL
EXECUTE dbo.sp_executesql 'l_mineventdatetime'
,@l_mineventdatetime
EXECUTE dbo.sp_executesql 'l_maxeventdatetime'
,@l_maxeventdatetime
END
DELETE FROM temp_asdr1
WHERE ((eventdatetime <= l_mineventdatetime)
OR (eventdatetime >= @l_maxeventdatetime))
AND filter = 0
SET @SWV_cursor_var1 = CURSOR FOR
SELECT
agentid,
eventtype,
eventdatetime,
reasoncode,
filter
FROM temp_asdr1
ORDER BY eventdatetime
OPEN @SWV_cursor_var1
FETCH NEXT FROM @SWV_cursor_var1 INTO @l_agentid, @l_eventtype, @l_eventdatetime, @l_reasoncode, @l_filter
WHILE @@FETCH_STATUS = 0
BEGIN
-- WARNING: The INSERT statement was commented, because column name or number of supplied values does not match table definition.
-- insert into temp_asdr(agentid, eventtype, eventdatetime, reasoncode, filter) values(temp_asdr_seq.nextval,l_agentid, l_eventtype, l_eventdatetime, l_reasoncode, l_filter);
FETCH NEXT FROM @SWV_cursor_var1 INTO @l_agentid, @l_eventtype, @l_eventdatetime, @l_reasoncode, @l_filter
END
CLOSE @SWV_cursor_var1
DELETE FROM temp_asdr1
SELECT TOP 1
@l_eventtype = eventtype,
@l_eventdatetime = eventdatetime,
@l_reasoncode = reasoncode,
@l_filter = filter
FROM temp_asdr
WHERE eventdatetime = (SELECT
MIN(eventdatetime)
FROM temp_asdr)
IF @@rowcount = 0
SELECT
@l_eventtype = NULL,
@l_eventdatetime = NULL,
@l_reasoncode = NULL,
@l_filter = NULL
DELETE FROM temp_login_logout
IF (@l_eventtype = @l_event_logout)
INSERT INTO temp_login_logout (seq, logintime, op1, logouttime, reasoncode, loginfilter, logoutfilter)
VALUES (0, NULL, '<', @l_eventdatetime, NULL, @l_filter, @l_filter)
INSERT INTO temp_login_logout (seq, logintime, loginfilter)
SELECT
seq,
eventdatetime,
filter
FROM temp_asdr tasdr
WHERE eventtype = @l_event_login
UPDATE temp_login_logout
SET logouttime = (SELECT
eventdatetime
FROM temp_asdr tasdr
WHERE tasdr.eventtype = @l_event_logout
AND tasdr.seq = (temp_login_logout.seq + 1)),
logoutfilter = (SELECT
filter
FROM temp_asdr tasdr
WHERE tasdr.eventtype = @l_event_logout
AND tasdr.seq = (temp_login_logout.seq + 1)),
reasoncode = (SELECT
reasoncode
FROM temp_asdr tasdr
WHERE tasdr.eventtype = @l_event_logout
AND tasdr.seq = (temp_login_logout.seq + 1))
UPDATE temp_login_logout
SET logouttime = @p_endTime,
op2 = '>',
logoutfilter = 0
WHERE logouttime IS NULL
UPDATE temp_login_logout
SET logintime = NULL,
op1 = '<',
reasoncode = NULL
WHERE loginfilter = 0
AND logoutfilter = 1
UPDATE temp_login_logout
SET logouttime = NULL,
op2 = '>',
reasoncode = NULL
WHERE loginfilter = 1
AND logoutfilter = 0
DELETE FROM temp_login_logout
WHERE loginfilter = 0
AND logoutfilter = 0
UPDATE temp_login_logout
SET duration = dbo.datediff('ss', logintime, logouttime)
END
有人可以帮助解决此错误。
我想我已经了解了一个问题。
可能是故障或其他原因。 但是在这里,我删除了在创建此表变量的地方创建的函数。 然后先创建存储过程,然后再创建函数。
我能够成功编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.