Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表变量-添加检查匹配行集是否存在的约束_Sql_Sql Server_Exists_Check Constraints_Table Variable - Fatal编程技术网

SQL表变量-添加检查匹配行集是否存在的约束

SQL表变量-添加检查匹配行集是否存在的约束,sql,sql-server,exists,check-constraints,table-variable,Sql,Sql Server,Exists,Check Constraints,Table Variable,更新pmbAustin的建议 鲍斯汀,谢谢。我想那会管用的。我创建了一个返回0或1的函数dbo.CK_WinteamSportExists。然而,我现在得到一个令人困惑的错误消息。当我测试我的解决方案时,我得到以下结果: create table #check ( SportID int ,WinTeamID int ,LoseTeamID int ,check ( (dbo.CK_WinteamSportExists (WinTeamID , SportID) = 1) ) ) 错误消

更新pmbAustin的建议

鲍斯汀,谢谢。我想那会管用的。我创建了一个返回0或1的函数dbo.CK_WinteamSportExists。然而,我现在得到一个令人困惑的错误消息。当我测试我的解决方案时,我得到以下结果:

create table #check
(
SportID int
,WinTeamID int
,LoseTeamID int
,check 
(
(dbo.CK_WinteamSportExists (WinTeamID , SportID) = 1)
)
)  
错误消息: Msg 4121,16级,状态1,第1行 找不到列dbo或用户定义函数或聚合dbo.CK\u WinteamSportExists,或者名称不明确

我尝试使用一个完全限定的名称mydatabase.dbo.CK_WinteamSportExists,no dice。 看起来我在检查中的语法有误,但我一生都找不到错误

原始问题 我试图在表变量上强制引用完整性。我在SQL Server 2012中工作

declare @GameID_Table table (
GameID int
,SportID int
,WinTeamID int
,LoseTeamID int
)  
@GameID\u表中WinTeamID/SportID和LoseTeamID/SportID的组合必须受到单独表链接中匹配行的约束,该链接定义为:

create table Link_TeamSport
(
TeamID int,
SportID int
primary key (TeamID, SportID)
)
通常我会使用复合外键来实现这一点,但是表变量中不允许使用这些外键。 我还尝试创建用户定义的函数来检查Link_TeamSport中是否存在匹配行,但表变量中也不允许使用自定义项

下面是一个工作代码示例,演示了我的约束条件。如果找到匹配的行,下面的代码将返回结果1,如果没有,则返回结果0。但是,我不知道如何将这个概念合并到@GameID_表中的check约束中

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

使用一个诱人的替代品@TableVariables有很多诱惑变量没有的限制,如果你想在其中包含更多的行,那么它们的性能也不会很好