必要に応じてINSERT/UPDATEするストアドプロシージャを作成しました。SELECT変数をINSERT値として使用している列名がテーブルと一致しません
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] 列名または指定された値の数がテーブル定義と一致しません。
これは私の完全なコード(私はライン48を合図)である:私はちょうど(保存も変更するのです時に私の質問は、なぜそれがライン48の後にINSERTをやろうとしているされて
@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
)プロシージャ、私はパラメータでそれを実行していない。
(dbo.Example myCondition = notExist SELECT * FROM)EXISTS、NOT WHERE)真、であれば、挿入に(INSERT INTO dbo.Example SELECT(私が条件とSELECTを使用して挿入することに留意してください
ただし、条件をtrueにするだけでIFを挿入します。 SELECTをVALUESの中に入れるべきですか?私の編集した質問(最後の部分)を参照 – Tiago
選択のために1つのサンプルを追加しました –
提案と説明をありがとう。 – Tiago