오류없이 컴파일되는 MS SQL 2008에 저장 프로 시저가 있지만 저장 프로 시저를 실행하면 '문자열 또는 이진 데이터가 잘 리게됩니다. ' 불행히도, 나는 이것이 어디에서 일어나고 있는지 추적 할 수 없다.문자열 또는 이진 데이터를 보면 저장 프로 시저를 실행할 때 잘릴 수 있습니다. MS SQL 2008
내 저장 프로 시저를 개발할 때 먼저 쿼리를 테스트 한 결과 제대로 작동했습니다. 사람이 어디에서 왜 나에게 이런 일이 보여줄 수있는 경우
그래서, 그것을 해결하는 방법을, 나는 감사하겠습니다 :
ALTER PROCEDURE [dbo].[sp_Material_Validation]
@ValidType varchar(MAX),
@MaterialID varchar(MAX)
AS
BEGIN
DECLARE
@MessageReturn varchar(100);
SET @MessageReturn = NULL;
IF @ValidType = 'Primary'
Select TOP 1 Valid.StatusMessage
From
(Select MatID,'Property Not Completed' as StatusMessage
From dbo.Properties
WHERE DATALENGTH(ValueString)=0
UNION
Select PrpCount.MatID,'There not all Properties exist' as StatusMessage
From (Select Count(unkey) as unKeyCt, MatID
From Properties
Group By MatID
Having NOT Count(Cast(UnKey as Int)) = 19)AS PrpCount
UNION
SELECT Header,'Material does not exist' as StatusMessage
FROM Materials Item
Where NOT EXISTS (Select ID
FROM MatMaster Mat
WHERE MAT.ID= Item.HEAD)
UNION
SELECT Header,'Material(s) not Complete' as StatusMessage
FROM Materials
Where MatID IN (Select ID
FROM MatMaster
WHERE INC ='Y')) as Valid
Where Valid.MatID = @MaterialID;
IF @MessageReturn IS NOT NULL
UPDATE dbo.Mat_DEV
SET Inco ='Y',
User_Message = @MessageReturn
WHERE MatID = @MaterialID
ELSE
UPDATE dbo.Mat_DEV
SET User_Message = 'No Validation Errors'
WHERE MatID = @MaterialID
테이블'ID' 필드는 실제로'varchar (max)'입니까? 암시 적 전환이 어떻게 작동하는지 알고 있습니까? –
이상하게 보입니다. select의 결과를 @ MessageReturn에 할당하지 않고, 모든 체크 후에 MaterialID를 사용하여 필터를 적용합니다. 그러면 나중에 폐기 될 테이블의 모든 레코드에 대해 수행됩니다. 각 하위 쿼리에서 검색 조건을 반복해야한다고 생각합니다. –