필요한 경우 INSERT/UPDATE하는 저장 프로 시저를 만들었습니다. 난 내가 삽입 여부를해야하는 경우 평가하기 위해이 방법을 사용하고 있습니다 :INSERT 값으로 SELECT 변수를 사용하는 열 이름이 일치하지 않습니다.
INSERT INTO X
SELECT @A, @B, @C -- Exactly as the table, all nullables
WHERE NOT EXISTS (SELECT * from ... WHERE condition)
을하지만 난
메시지 213, 수준 16, 상태 1, 프로 시저 ArtigoEAN_Remover, 라인 (48) [일괄 시작을 수신하고 Line 7] 제공된 값의 열 이름이나 개수가 테이블 정의와 일치하지 않습니다. 그래서
@ArtigoID AS varchar(14), @TipoArtigo AS varchar(3), @CodBarras AS varchar(24) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements. SET NOCOUNT ON; IF (@ArtigoID IS NOT NULL AND @TipoArtigo IS NULL) OR (@ArtigoID IS NULL AND @TipoArtigo IS NOT NULL) BEGIN PRINT 'Tem que escolher ArtigoID & TipoArtigo para remover código EAN da referência.' RETURN END -- IF (@CodBarras IS NOT NULL) AND (@ArtigoID IS NOT NULL OR @TipoArtigo IS NOT NULL) BEGIN PRINT 'Escolher Código EAN apenas (Para remover esse código de barras de todas as referências) OU ArtigoID + TipoArtigo (remover todos os códigos EAN associados a essa referência)' RETURN END -- IF @ArtigoID IS NOT NULL AND @TipoArtigo IS NOT NULL BEGIN UPDATE [s].[dbo].[FArtigo] SET CodBarras = '' WHERE ArtigoID = @ArtigoID AND TipoArtigo = @TipoArtigo AND CodBarras = @CodBarras -- LINE 48 INSERT INTO [s].[dbo].[Infolog_ArtigoEAN] SELECT @ArtigoID,@TipoArtigo,@CodBarras WHERE NOT EXISTS (SELECT * FROM [s].[dbo].[Infolog_ArtigoEAN] WHERE ArtigoID = @ArtigoID AND TipoArtigo = @TipoArtigo AND CodBarras = @CodBarras) -- Inserts above if nox exist, update below in any case. UPDATE [s].[dbo].[Infolog_ArtigoEAN] SET CodBarras = '' WHERE ArtigoID = @ArtigoID AND TipoArtigo = @TipoArtigo AND CodBarras = @CodBarras INSERT INTO [s].[dbo].[ArtigoEAN] SELECT @ArtigoID,@TipoArtigo,@CodBarras WHERE NOT EXISTS (SELECT * FROM [s].[dbo].[Infolog_ArtigoEAN] WHERE ArtigoID = @ArtigoID AND TipoArtigo = @TipoArtigo AND CodBarras = @CodBarras) UPDATE [s].[dbo].[ArtigoEAN] SET CodBarras = '' WHERE ArtigoID = @ArtigoID AND TipoArtigo = @TipoArtigo AND CodBarras = @CodBarras END -- IF @CodBarras IS NOT NULL AND (@ArtigoID IS NULL AND @TipoArtigo IS NULL) BEGIN UPDATE [s].[dbo].[FArtigo] SET CodBarras = '' WHERE CodBarras = @CodBarras UPDATE [s].[dbo].[Infolog_ArtigoEAN] SET CodBarras = '' WHERE CodBarras = @CodBarras UPDATE [s].[dbo].[ArtigoEAN] SET CodBarras = '' WHERE CodBarras = @CodBarras END END
내 질문에, 왜 난 그냥 변경하고 때 라인 (48) 후 INSERT을 위해 노력하고있다 (
저장 :
이 내 전체 코드입니다 (내가 라인 (48)을 신호)) 프로 시저, 심지어 매개 변수를 실행하지 않습니다. (SELECT 존재합니다 WHERE WHERE myCondition = notExist)
dbo.Example * FROM) 내가, 경우 (INSERT INTO dbo.Example SELECT가 (, 삽입을 조건으로 SELECT를 사용하여 실제 삽입 할 것을 염두에유지
글쎄, 조건문이 참인 경우에만 삽입하고 싶습니다. SELECT를 VALUES 안에 두어야합니까? 내 편집 된 질문보기 (최종 파트) – Tiago
선택을 위해 하나의 샘플을 추가했습니다. –
제안 및 설명에 감사드립니다. – Tiago