Обновление с предложением pmbAustin вSQL Таблица переменных - добавление ограничений, который проверяет наличие соответствующей строки установить
pmbAustin, спасибо. Я думаю, что это сработает. Я создал функцию «dbo.CK_WinteamSportExists», которая возвращает 0 или 1. Однако теперь я получаю сообщение об ошибке. Когда я проверил мое решение, которое я получаю следующее:
create table #check
(
SportID int
,WinTeamID int
,LoseTeamID int
,check
(
(dbo.CK_WinteamSportExists (WinTeamID , SportID) = 1)
)
)
Сообщение об ошибке: Msg 4121, уровень 16, состояние 1, строка 1 Не может найти либо столбец «DBO» или определенного пользователь функцию или совокупный «DBO .CK_WinteamSportExists ", или имя неоднозначно.
Я пробовал использовать полное имя «mydatabase.dbo.CK_WinteamSportExists», без кубиков.
Похоже, что у меня есть синтаксис неправильно в проверке, но для жизни меня я не могу найти ошибку.
Оригинал Вопрос
Я пытаюсь обеспечить целостность на табличную переменную. Я работает в SQL Server 2012.
declare @GameID_Table table (
GameID int
,SportID int
,WinTeamID int
,LoseTeamID int
)
Комбинации WinTeamID/SportID и LoseTeamID/SportID в @GameID_Table должны быть ограничены наличием совпадающей строки в отдельной таблице Link_TeamSport определяется как:
create table Link_TeamSport
(
TeamID int,
SportID int
primary key (TeamID, SportID)
)
Обычно я делаю это с помощью сложного внешнего ключа, однако это не допускается в переменных таблицы.
Я также попытался создать пользовательские функции, которые проверяют наличие соответствующей строки в Link_TeamSport, но UDF также не разрешены в переменных таблицы.
Вот пример рабочего кода, который иллюстрирует мое условие ограничения. Код ниже возвращает результат 1, если найдена совпадающая строка, а 0 - нет. Однако я не могу понять, как включить эту концепцию в контрольное ограничение в @GameID_Table.
declare @winteam int
declare @sportid int
set @winteam = 1001
set @sportid = 4001
select count(*) from
(
select lts.TeamID, lts.sportid from Link_TeamSport lts
where
(@winteam = lts.TeamID and @sportid = lts.sportid)
) a