使用用户定义函数作为临时表中的约束
Posted
技术标签:
【中文标题】使用用户定义函数作为临时表中的约束【英文标题】:Using a User Defined Function as a constraint within a temporary table 【发布时间】:2014-08-02 22:04:34 【问题描述】:我正在尝试创建一个在约束中使用 UDF 的临时表。我收到以下错误消息:
消息 4121,第 16 级,状态 1,第 1 行 找不到列
dbo
或用户定义的函数或聚合dbo.CK_LoseTeamSportExists
,或者名称不明确。
我已经测试了这个功能,它可以在其他环境中工作。任何的想法?
所有代码如下:
CREATE FUNCTION dbo.CK_LoseTeamSportExists
(
@loseteam INT,
@sportid INT
)
RETURNS BIT
AS
BEGIN
DECLARE @return BIT
IF EXISTS
(
SELECT TeamID,
sportid
FROM Link_TeamSport
WHERE (TeamID = @loseteam AND SportID = @sportid)
)
SET @return = 1
ELSE
SET @return = 0
RETURN @return
END
GO
CREATE TABLE #check
(
SportID INT,
WinTeamID INT,
LoseTeamID INT,
CHECK ((dbo.CK_LoseTeamSportExists(LoseTeamID, SportID) = 1))
)
【问题讨论】:
【参考方案1】:这应该可行。
USE [tempdb]
GO
CREATE FUNCTION dbo.CK_LoseTeamSportExists
(
@loseteam INT,
@sportid INT
)
RETURNS BIT
AS
BEGIN
DECLARE @return BIT
IF EXISTS
(
SELECT TeamID,
sportid
FROM Link_TeamSport
WHERE (TeamID = @loseteam AND SportID = @sportid)
)
SET @return = 1
ELSE
SET @return = 0
RETURN @return
END
GO
IF OBJECT_ID(N'tempdb..#check')>0
DROP TABLE #check
GO
CREATE TABLE #check
(
SportID INT,
WinTeamID INT,
LoseTeamID INT,
CHECK ((dbo.CK_LoseTeamSportExists(LoseTeamID, SportID) = 1))
)
【讨论】:
注意:无需对 SQL Server 2014 中的原始脚本进行任何修改即可工作以上是关于使用用户定义函数作为临时表中的约束的主要内容,如果未能解决你的问题,请参考以下文章