使用带有存储过程参数的 LIKE 运算符

问题描述 投票:0回答:8

我有一个存储过程,它使用

LIKE
运算符在其他一些参数中搜索卡车位置

   @location nchar(20),
   @time time,
   @date date
AS
   select 
       DonationsTruck.VechileId, Phone, Location, [Date], [Time]
   from 
       Vechile, DonationsTruck
    where 
       Vechile.VechileId = DonationsTruck.VechileId
       and (((Location like '%'+@location+'%') or (Location like '%'+@location) or (Location like @location+'%') ) or [Date]=@date or [Time] = @time)

我将其他参数清空并仅按位置搜索,但即使我使用位置的全名,它也始终不返回任何结果

sql-server stored-procedures parameters sql-like
8个回答
46
投票

您的

@location nchar(20)
数据类型应该是
@location nvarchar(20)
,因为 nChar 具有固定长度(用空格填充)。
如果 Location 也是 nchar,则必须将其转换:

 ... Cast(Location as nVarchar(200)) like '%'+@location+'%' ...   

要使用 和

AND
条件启用可空参数,只需使用 IsNull 或 Coalesce 进行比较,这在使用
OR
的示例中不需要。

例如如果您想比较位置以及日期和时间。

@location nchar(20),
@time time,
@date date
as
select DonationsTruck.VechileId, Phone, Location, [Date], [Time]
from Vechile, DonationsTruck
where Vechile.VechileId = DonationsTruck.VechileId
and (((Location like '%'+IsNull(@location,Location)+'%')) and [Date]=IsNUll(@date,date) and [Time] = IsNull(@time,Time))

7
投票

我也在做同样的事情。检查下面的声明。为我工作!!


SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'

0
投票
CREATE PROCEDURE [dbo].[Sp_schemeallotment] (
    @SchemeName NVARCHAR (255) = ' ',
    @Ind INT = 0
)
AS
  BEGIN
      IF ( @Ind = 1 )
        BEGIN
            SELECT *
            FROM   schemeallotment
        END

      IF ( @Ind = 2 )
        BEGIN
            SELECT *
            FROM   schemeallotment
            WHERE  schemename LIKE '%' + @SchemeName + '%'
        END
  END

--exec sp_SchemeAllotment @Ind=2, @SchemeName='shree'
go 

像这样分配这些变量很重要:

(
    @SchemeName nvarchar (255) = ' ',
    @Ind int = 0
)

0
投票

对于 mysql- SELECT * FROM 表名 WHERE 列名称 LIKE '%'+ @location+'%';

对于 Oracle - SELECT * FROM 表名 WHERE 列名称 LIKE '%'|| @位置 ||'%';


0
投票

上面的LIKE条件是错误的,需要使用LIKE命令是 COL1 就像 '%@Variable%'


-1
投票
...
WHERE ...
      AND (@Location is null OR (Location like '%' + @Location + '%'))
      AND (@Date is null OR (Date = @Date))

这样更明显的是当参数为null时不使用。


-1
投票
   CREATE procedure [dbo].[sp_SchemeAllotment]
    (
    @SchemeName nvarchar (255)='',
    @Ind int=0
    )
    As 
    Begin
    if (@Ind = 1)
    begin
    SELECT * FROM SchemeAllotment
    End
    if (@Ind = 2)
    begin
    SELECT * FROM SchemeAllotment where SchemeName like '%'+ @SchemeName +'%'
    end
    End
    --exec sp_SchemeAllotment @Ind=2, @SchemeName='shree'
    GO

-5
投票

EG:与村庄名称比较

ALTER PROCEDURE POSMAST
(@COLUMN_NAME VARCHAR(50))
AS
SELECT * FROM TABLE_NAME
WHERE 
village_name LIKE + @VILLAGE_NAME + '%';
© www.soinside.com 2019 - 2024. All rights reserved.