Вставить в SQL Server из табличного типа не удастся, если более 1 строки - PullRequest
0 голосов
/ 27 января 2019

Следующая процедура получает данные из C # в виде данных. Я уверен, что таблица отправляется с несколькими строками. Если в нем несколько строк, то данные не вставляются, но если таблица данных содержит только одну строку, она вставляет ее без проблем.

ALTER PROCEDURE [dbo].[MergeContactInfo]
    @ContactInfo dbo.[PersonContactTableType] READONLY
AS
BEGIN
    MERGE INTO PersonContact AS pc
    USING @ContactInfo AS ci ON pc.Person = ci.Person

    WHEN MATCHED THEN 
       UPDATE SET pc.Value = ci.Value, pc.Type = ci.Type
    WHEN NOT MATCHED THEN 
       INSERT VALUES(ci.Person, ci.Type, ci.Value);
END

Любое решение, почему не вставлено несколько строк и вставлена ​​только одна строка, нет никаких уникальных ограничений.

@ Контактная информация следующая

CREATE TYPE [dbo].[PersonContactTableType] AS TABLE(
    [Person] [int] NOT NULL,
    [Type] [tinyint] NOT NULL,
    [Value] [varchar](100) NOT NULL,
    PRIMARY KEY CLUSTERED ([Person] ASC) WITH (IGNORE_DUP_KEY = OFF)
)
GO

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Ваш код отлично работает на стороне SQL, Я тестировал игру с содержимым переменной таблицы и вижу, что она объединяется с данными таблицы, как и ожидалось

declare @CI as [PersonContactTableType];
insert into @CI values (11,1,'ERALPER'),(12,2,'The Phantom'),(13,2,'Lord Vader'),(14,1,'Kodyaz')
exec [MergeContactInfo] @CI;
go
select * from PersonContact
0 голосов
/ 27 января 2019

Проверьте данные в C #. Каждый номер в поле «Персона» должен быть уникальным. Процедура отлично работает как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...