다른 하나를 호출하는 하나의 저장 프로 시저가 두 개 있습니다. 컴파일시 오류가 없지만 SearchProcedure
을 실행하면 outputprocedure
이 호출되지 않습니다. 호출되지 않는 이유. SearchProcedure
은 지금까지 잘 작동했습니다. 문제의 원인을 알려주십시오.저장 프로 시저가 SQL에서 호출되지 않음
내가 알고있는 OutputProcedure
은 Select 문을 사용해 보았습니다.
Exec SearchProcedure @firstname ='Simran', @middlename='kaur', @lastname = 'Khurana', @City='Delhi'
절차 : 다음
호출 : 여기
코드이다 SearchProcedure에서CREATE Procedure OutputProcedure
(
@LastNameFromUser nvarchar(20) = null,
@LastNameFromTable nvarchar(20),
@MiddleNameFromUser nvarchar(20) = null,
@MiddleNameFromTable nvarchar(20) = null,
@CityFromUser nvarchar(20) = null,
@CityFromTable nvarchar(20) = null,
@Percentage int out
)
AS
BEGIN
select 'OUTPUTPROCEDURECALLED'
declare @maxvalue int
DECLARE @variableTable TABLE (
idx int identity(1,1),
matchvalue nvarchar(15))
INSERT INTO @variableTable(matchvalue) values ('MiddleName')
INSERT INTO @variableTable(matchvalue) values ('LastName')
INSERT INTO @variableTable(matchvalue) values ('City')
SELECT * FROM @variableTable
DECLARE @counter int
declare @sql nvarchar(100)
declare @sql2 nvarchar(25), @finalResult nvarchar(100)
declare @sql3 nvarchar(300), @tempresultStore nvarchar(20), @temp int, @temp2 int, @average int
SET @counter = 1
SELECT @maxvalue = (SELECT MAX(idx) FROM @variableTable)
select @maxvalue as 'MAXVALUE'
WHILE(@counter <= @maxvalue)
BEGIN
DECLARE @colVar nvarchar(15)
SELECT @colVar = matchvalue FROM @variableTable WHERE idx = @counter
set @sql = 'declare' +' ' + '@Temp'+ @colVar
exec @sql
select @sql as 'SQLFORDECLARATIONS'
set @temp = CHARINDEX(' ',@sql)
select @temp as 'resultofcharindex'
set @temp2 = @temp + 1
SELECT @temp2 AS 'AFTERADDING1'
set @tempresultStore = Right(@sql, @temp2)
SELECT @tempresultStore AS 'FINALCUTPART'
set @sql3 = 'SET ' + @sql2 + '= set ' + ' ' + @tempresultStore + '=' + 'dbo.[Match' + @colVar + '](' + @colVar + 'FromUser' + ',' + @colVar + 'FromTable' + ',' + 0 + ')'
EXEC @sql3
select @sql3 as 'check sql query formed'
set @finalResult = @finalResult + @sql2
select @finalResult as 'SUM'
SET @counter = @counter + 1
select @counter as 'COUNTERVALUE'
END
set @Percentage = @finalResult/@maxvalue
SELECT @Percentage AS 'FINALRESULT'
RETURN
END
create procedure SearchProcedure
(
@firstname nvarchar(20),
@middlename nvarchar(20) = null,
@lastname nvarchar(20),
@DOB Date = null,
@SSN nvarchar(30)= null,
@ZIP nvarchar(10)= null,
@StateOfResidence nvarchar(2)= null,
@City nvarchar(20)= null,
@StreetName nvarchar(20)= null,
@StreetType nvarchar(20)= null,
@BuildingNumber int= null,
@Aptnumber nvarchar(10)= null
)
As
DECLARE @sSQL NVARCHAR(2000), @Where NVARCHAR(1000) = ' '
declare @Percent int,
@FN nvarchar(20),
@MN nvarchar(20) = null,
@LN nvarchar(20),
@DateOfB Date = null,
@SSNumber nvarchar(30)= null,
@ZIPCode nvarchar(10)= null,
@StateOfRes nvarchar(2)= null,
@CityOfRes nvarchar(20)= null,
@StreetNameRes nvarchar(20)= null,
@StreetTypeRes nvarchar(20)= null,
@BuildingNumberRes int= null,
@AptnumberRes nvarchar(10)= null
set @Percent = 0
create table #results
(
firstname nvarchar(20) not null,
middlename nvarchar(20),
lastname nvarchar(20)not null,
PercentageMatch int not null,
DOB Date,
SSN nvarchar(30),
ZIP nvarchar(10),
[State] nvarchar(2),
City nvarchar(20),
StreetName nvarchar(20),
StreetType nvarchar(20),
BuildingNumber int,
Aptnumber nvarchar(10)
)
declare c Cursor local static Read_only
for
SELECT * from dbo.Patients where firstname = @FN
open c
fetch next from c into @FN,
@MN,
@LN,
@DateOfB,
@SSNumber,
@ZIPCode,
@StateOfRes,
@CityOfRes,
@StreetNameRes,
@StreetTypeRes,
@BuildingNumberRes,
@AptnumberRes
while @@FETCH_STATUS = 0 BEGIN
/*set @Percent = dbo.[MatchLastName](@lastname, @LN, @Percent)
set @Percent = dbo.[MatchMiddleName](@middlename, @MN, @Percent)
set @Percent = dbo.[MatchCity](@City, @CityOfRes, @Percent)*/
Exec [dbo].[OutputProcedure] @lastname, @LN, @middlename, @MN,@City, @CityOfRes, @Percent output
Insert into #results values
(@FN,@MN,@LN,@Percent, @DateOfB,@SSNumber, @ZIPCode,@StateOfRes,@CityOfRes,@StreetNameRes,@StreetTypeRes,@BuildingNumberRes,@AptnumberRes)
fetch next from c into @FN,
@MN,
@LN,
@DateOfB,
@SSNumber,
@ZIPCode,
@StateOfRes,
@CityOfRes,
@StreetNameRes,
@StreetTypeRes,
@BuildingNumberRes,
@AptnumberRes
end
select * from #results order by PercentageMatch desc
IF OBJECT_ID('tempdb..#results') IS NOT NULL DROP TABLE #results
go
루프 내에서'PRINT @FN; '을 시도 했습니까? 거기에 출력물을 얻었습니까? 내 첫 번째 추측은 커서가'firstname = @ FN'에 대해 0 행을 처리하고 있다는 것입니다. –
오, 안돼. 내가 특별히 언급 한 것처럼 검색 프로 시저가 제대로 작동하지 않을 때 outputProcedure를 호출하는 대신에 직접적으로 작업을 수행했습니다. –
응답자가 아래에 주목 한 값을 입력하지 않았기 때문에 의미가 없습니다. '@ FN'. 따라서 코드가 다르면 (@FN = @ firstname'을 지정했거나 커서 선언이 다르게 보였을 때) 아마 잘 동작했을 것입니다. –