【问题标题】: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))
)

【问题讨论】:

    标签: sql-server tsql constraints user-defined-functions temp-tables


    【解决方案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 中的原始脚本进行任何修改即可工作
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多