我有一个存储过程,它使用
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)
我将其他参数清空并仅按位置搜索,但即使我使用位置的全名,它也始终不返回任何结果
您的
@location nchar(20)
数据类型应该是 @location nvarchar(20)
,因为 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))
我也在做同样的事情。检查下面的声明。为我工作!!
SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'
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
)
对于 mysql- SELECT * FROM 表名 WHERE 列名称 LIKE '%'+ @location+'%';
对于 Oracle - SELECT * FROM 表名 WHERE 列名称 LIKE '%'|| @位置 ||'%';
上面的LIKE条件是错误的,需要使用LIKE命令是 COL1 就像 '%@Variable%'
...
WHERE ...
AND (@Location is null OR (Location like '%' + @Location + '%'))
AND (@Date is null OR (Date = @Date))
这样更明显的是当参数为null时不使用。
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
EG:与村庄名称比较
ALTER PROCEDURE POSMAST
(@COLUMN_NAME VARCHAR(50))
AS
SELECT * FROM TABLE_NAME
WHERE
village_name LIKE + @VILLAGE_NAME + '%';