2011-09-21 5 views
0

이 UPDATE 문을 실행하는 데 문제가 있습니다. 오류는 반환되지 않고 테이블을 업데이트하지 않습니다.UPDATE 문이 테이블을 업데이트하지 않습니다.

@recordExists varchar(10), 
@fileName varchar(50), 
@itemCode varchar (50), 
[email protected] datetime, 
@submittedBy varchar(30), 
@revision varchar(50), 
@itemCode5 varchar(50), 
@itemCkDigit varchar(10), 
@suffix varchar(10) 

AS 

DECLARE @sql varchar(1000) 
DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 
    -- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

     SET @sql = 'UPDATE tblGraphicInfo SET [uploadDate] = ''' + CONVERT(nvarchar(20), @uploadDate) + ''', [submittedBy] = ''' + @submittedBy + ''' WHERE [itemCode] = "' + @itemCode + '"; ' 
     EXEC(@sql) 
ELSE 

어떤 도움을 주시면 감사하겠습니다.

FYI, 나는 그것이 문제라고 생각했기 때문에 날짜를 전달하는 것을 변경했습니다. uploadDate 필드는 tblGraphicInfo 테이블의 datetime 필드로 정의됩니다.

+0

이 @recordExists의 값이 있는지 확인하기 위해 인쇄() 문을 넣어 시도 것을 너 생각하지? – Maciej

+0

예 @recordExists의 값이 올바르게 채워집니다. – htm11h

+0

Exec (@sql)은 단일 명령문 만 실행하는 것처럼 항상 btw를 실행하고 실행합니다. BEGIN/END 래퍼가 필요합니다. –

답변

1

귀하의 문제가 될 필요가 있었다 귀하의 경우 문

WHERE [itemCode] = "' + @itemCode + '"; ' 

당신은 작은 따옴표 (')의 캐릭터 라인을 랩 할 것없는 큰 따옴표 ("). 문자열에서 이스케이프 처리 할 때 작은 따옴표를 두 배로 늘려야합니다.

WHERE [itemCode] = ''' + @itemCode + '''; ' 

sp_executsql을 참조 할 수도 있습니다. 그것은 매개 변수를 처리하기위한 훨씬 깔끔한 구문을 가지고 있습니다. 당신도 동적으로 문자열 함께 당신의 UPDATE 문을 필요로하는 이유

0

전달한 변수가 null인지 확인 했습니까? 이로 인해 @sql 변수 전체가 null이 될 수 있습니다. @sql 변수를 Print()로 인쇄 해보고 이것이 맞는지 확인하십시오.

프로파일 러를 실행하여 실행중인 내용을 확인할 수도 있습니다.

0

필드 중 하나라도 null 인 경우 @sql은 null입니다 (연결 null은 null 임). 당신은 BEGIN END

에 포장 할 필요가 다른 경우는 내부에 하나 개 이상의 라인을 수행 또한 경우

당신이 EXEC를 사용하는 대신하고있는 어떤 이유가 ..

@recordExists varchar(10), 
@fileName varchar(50), 
@itemCode varchar (50), 
[email protected] datetime, 
@submittedBy varchar(30), 
@revision varchar(50), 
@itemCode5 varchar(50), 
@itemCkDigit varchar(10), 
@suffix varchar(10) 

AS 

DECLARE @sql varchar(1000) 
DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 
    -- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

     UPDATE tblGraphicInfo SET [uploadDate] = @uploadDate, [submittedBy] = @submittedBy WHERE [itemCode] = @itemCode 
ELSE 

당신은 실제로 이전 문이 더 기록을 수정하지 않는 경우 = 0 테스트 것 대신에 다음의 @@ ROWCOUNT을하고 그래서 삽입을

UPDATE tblGraphicInfo SET [uploadDate] = @uploadDate, [submittedBy] = @submittedBy WHERE [itemCode] = @itemCode 

if @@ROWCOUNT=0 then 

INSERT into tblGraphicInfo (uploadDate,submittedBy,itemCode) values (@uploadDate,@submittedBy,@itemCode) 
2

내가 볼 수없는 - 바로 사용

DECLARE @sql varchar(1000) 

DECLARE @uploadDate datetime 
SET @uploadDate = GetDate() 

-- Establish update or insert in to the graphics info table. 
IF @recordExists = 'Y' 

    UPDATE dbo.tblGraphicInfo 
    SET [uploadDate] = CONVERT(NVARCHAR(20), @uploadDate), 
     [submittedBy] = @submittedBy 
    WHERE [itemCode] = @itemCode 

ELSE 
관련 문제