sql - 在 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'.
这怎么可能解决?
解决方案
您已声明该函数以返回一个表。因此,您需要在FROM
子句中引用它:
INSERT INTO dbo.CategoryGateway(GatewayId, CategoryId)
SELECT gcp.GatewayId, gcp.CategoryId
FROM dbo.GetGatewayCategoryPair('GateName', 'CatName') gcp;
推荐阅读
- azure - Azure 映像构建 - azure-arm:无法删除托管映像
- django - 更改通过熊猫创建的 html 表上的列名
- bash - 在 Mac OS 终端中按设定的时间批量更改文件创建日期
- react-native - 从商店响应本机自动更新
- audio - FFmpeg - 音频标签 | 加利西亚语
- azure - 将数据从 Azure 表存储迁移(和转换)到 Cosmos DB Sql API 的最佳方式
- apache-poi - Apache POI docx:HTML 作为带有照片的 altChunk
- powerbi - 使用过滤器从另一个表中获取最小日期
- snowflake-cloud-data-platform - PUT 命令中变量的使用
- c# - WHERE Name='{NameInput.Text}' AND Password='{GetHashString(PasswordInput.Text)} 不起作用