首页 > 解决方案 > 在 ms sql 中使用创建的函数时遇到问题

问题描述

我做了一个 SQL 函数。这是一个简单的函数,它通过名称获取给定网关和类别对象的 ID:

USE [dev_ticketsystem]
GO

CREATE FUNCTION dbo.GetGatewayCategoryPair(@GatewayName varchar(100), @CategoryName varchar(100))

RETURNS @PairedTable TABLE 
(
    GatewayId uniqueidentifier,
    CategoryId uniqueidentifier
)
AS
BEGIN
    DECLARE @CategoryId uniqueidentifier;
    DECLARE @GatewayId uniqueidentifier;

    SELECT @CategoryId = [Id] 
    FROM [dev_ticketsystem].[dbo].[Category]
    WHERE [Name] = @CategoryName;


    SELECT @GatewayId = [Id] 
    FROM [dev_ticketsystem].[dbo].[Gateway]
    WHERE [Name] = @GatewayName;

    IF @GatewayId IS NOT NULL 
    BEGIN
        IF @CategoryId IS NOT NULL
        BEGIN
            INSERT @PairedTable
            SELECT @GatewayId, @CategoryId;
        END;
    END;
    RETURN;
END;
GO

执行此脚本后,它创建了函数,因此我可以在 MS SQL Management Studio 中看到。

但是当我试图用它来调用它时:

USE [dev_ticketsystem]
GO

INSERT INTO [dbo].[CategoryGateway]
           ([GatewayId]
           ,[CategoryId])
     VALUES
           (dbo.GetGatewayCategoryPair('GateName', 'CatName').GatewayId,
           dbo.GetGatewayCategoryPair('GateName', 'CatName').CategoryId);

它抛出异常:

Incorrect syntax near 'GetGatewayCategoryPair'.

这怎么可能解决?

标签: sqlsql-server

解决方案


您已声明该函数以返回一个表。因此,您需要在FROM子句中引用它:

INSERT INTO dbo.CategoryGateway(GatewayId, CategoryId)
     SELECT gcp.GatewayId, gcp.CategoryId
     FROM dbo.GetGatewayCategoryPair('GateName', 'CatName') gcp;

推荐阅读