У меня есть таблица SQL Server A, которая от 1 до многих с таблицами B и C, так что 1 запись в A может иметь много записей в B и C через внешний ключ.Определение дублированных данных на основе ввода первичного ключа
Я передаю первичный ключ A в мою хранимую процедуру, из которой я хочу определить, имеют ли входные ABC-отношения дубликаты данных для любых отношений ABC в базе данных.
Условие дублирования заключается в следующем.
Если данные столбца BC строк ввода также существуют в базе данных для другой записи A, мы будем называть A`, тогда BC` является дубликатом BC и A 'является дубликатом A. Процедура должен возвращать первичный ключ.
До сих пор я застрял в определении того, как это сделать на декларативном языке. Моя последняя попытка имеет проблемы с столбцами В существующих в С.
DECLARE @InputAPrimaryKey INT
SELECT B.APrimaryKey
FROM B, C
JOIN(SELECT *
FROM B, C
WHERE B.APrimaryKey = C.APrimaryKey
AND B.AprimaryKey = @InputAPrimaryKey) As input
ON input.Bcolumndata = B.columndata
AND input.Ccolumndata = C.columndata
AND ...
Это приводит к красной линии под «в качестве входных данных», которые пни меня.
Может ли кто-нибудь дать совет о том, как подойти к этой проблеме? Спасибо.
[Плохие привычки пинают: использование старого стиля JOIN и] (HTTP: // sqlblog .com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - стиль старого стиля * разделенных запятыми таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад), и его использование не рекомендуется –
Ну, что делает« красная squiggly line »sa когда вы наводите на него курсор? –
Ваш псевдоним «input» имеет двойные имена в именах столбцов. Это запрещено. Вместо * используйте explisit имена столбцов (с псевдонимом). (Пример - ваши таблицы содержат поля APrimaryKey) – DimaSUN