首页 > 解决方案 > SQL Server 中的参数传递问题

问题描述

我在 T-SQL 中编写了一个函数,它应该采用字符串值并在“Course Taken”列中返回具有相似值的任何行。这是功能:

enter code here
USE [alumni_project1]
GO
/****** Object:  UserDefinedFunction [dbo].[Course_Search]    Script Date: 24-Mar-21 7:45:04 PM 
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Course_Search]
(
@course varchar(255)
)
RETURNS TABLE
AS
RETURN
    SELECT *
    FROM Alumni
    WHERE Course_taken like '%@course%';

但是,当我尝试使用该功能时,它不会产生任何结果。这就是我调用函数的方式:

DECLARE @c  VARCHAR(255)
SET @c = 'comp'
SELECT * FROM dbo.Course_Search(@c)

注意:如果我使用常规 SELECT 语句,它会返回正确的输出,即 Course_taken= 'Computer Science' 的两行。如何解决这个问题?

标签: sqlsql-serverdatabasefunction

解决方案


'%@course%'没有做你认为的那样。它正在寻找包含文字字符串 '@course' 而不是参数中的值的行@course。SQL 不是脚本语言,它不会将参数/变量的值注入到文字中。

您需要连接'%'参数的任一侧:

CREATE FUNCTION [dbo].[Course_Search] (@course varchar(255))
RETURNS TABLE AS
RETURN
    SELECT *
    FROM Alumni
    WHERE Course_taken LIKE '%' + @course + '%';

推荐阅读