그리고는 그것은메시지 16915, 수준 16, 상태 1, 프로 시저 client_myClientsProc, 라인 46
이름 '으로 커서 cur_keywords '가 이미 존재합니다.
메시지 16905, 수준 16, 상태 1, 절차 client_myClientsProc, 줄 커서가 이미 열려 있습니다. 나는 다시 그것을 실행하려고하면
메시지 208, 수준 16, 상태 0, 절차 client_myClientsProc 라인 49
잘못된 개체 이름 '## CLIENTS_KEYWORD을 말한다.
지금이 ================= ...
ALTER PROCEDURE [dbo].[client_myclientsproc]
@Keywords varchar(max),
@Delimiter varchar(10) = ' '
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MYQUERY NVARCHAR(MAX);
DECLARE @tempkeyword varchar(4000)
DECLARE @TempCount INT
IF OBJECT_ID('TempDB..##CLIENTS_KEYWORD') IS NOT NULL
BEGIN
DROP TABLE ##CLIENTS_KEYWORD
END
ELSE
BEGIN
CREATE TABLE ##CLIENTS_KEYWORD(client_id int)
END
IF OBJECT_ID('TempDB..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
BEGIN
DROP TABLE ##TEMP_CLIENTS_KEYWORD
END
ELSE
BEGIN
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(productid int)
END
SET @MYQUERY = 'SELECT clientID, Client_Name FROM MYCLIENTS WHERE ClientID IN ';
IF(@Delimiter<>'none')
BEGIN
DECLARE cur_keywords CURSOR FOR
select value from SC_Split(@Keywords,@Delimiter)
OPEN cur_keywords
FETCH NEXT FROM cur_keywords into @tempkeyword
INSERT ##CLIENTS_KEYWORD(client_id) exec getClientsByKeyword @tempkeyword
WHILE @@FETCH_STATUS = 0
FETCH NEXT FROM cur_keywords into @tempkeyword
INSERT ##TEMP_CLIENTS_KEYWORD(client_id) exec getClientsByKeyword @tempkeyword
select @TempCount=COUNT(client_id) from ##TEMP_CLIENTS_KEYWORD
IF(@TempCount<>0)
BEGIN
DELETE FROM ##CLIENTS_KEYWORD WHERE client_id NOT IN(SELECT client_id from ##TEMP_CLIENTS_KEYWORD)
INSERT ##CLIENTS_KEYWORD (client_id) (select client_id from ##TEMP_CLIENTS_KEYWORD)
END
CLOSE cur_keywords
DEALLOCATE cur_keywords
END
ELSE
BEGIN
print(@Keywords)
INSERT ##CLIENTS_KEYWORD(client_id) exec getClientsByKeyword @Keywords
END
SET @MYQUERY = @MYQUERY + '(SELECT * FROM ##CLIENTS_KEYWORD)'
SET @MYQUERY = @MYQUERY + ' ORDER BY NAME'
print @MYQUERY
EXEC SP_EXECUTESQL @MYQUERY
END
GO
내가 그렇게 나를 참아주세요, 해결하기 위해 노력하고 예전의 코드입니다 ===
얻을 키워드 코드에 의해 클라이언트
CREATE PROCEDURE [dbo].[getClientsByKeyword]
@Keyword varchar(max)
AS
BEGIN
SET NOCOUNT ON;
select
DISTINCT(clients.clientID)
from
Clients_Table clients
left join clientNumber cn on cn.clientid=clients.clientid
where
clients.activeind = 1
and (clients.Name like '%' + @Keyword + '%'
or clients.clientNum LIKE '%' + @Keyword + '%'
or cn.clientN like '%' + @Keyword + '%')
END
GO
어떤 SQL Server 버전을 사용하고 있습니까? –
내 버전은 2008입니다 – user710502
'getClientsByKeyword'는 무엇을합니까? 단순한 조인으로 바꾸거나 (더 복잡한 경우) 논리를 테이블 값의 함수에 넣으면 커서를 완전히 삭제할 수 있습니다. –