我想在选定的组合框项目(DataBase中的字段)中搜索Word(文本框), 我的商店程序是:
USE [QueueDB]
GO
/****** Object: StoredProcedure [dbo].[SP_SelectDriver_ByNameAndField] Script Date: 09/07/2012 17:20:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_SelectDriver_ByNameAndField]
@Word nvarchar(100),
@Field nvarchar(100)
AS
BEGIN
select * from Driver where @Field like + N'%' + @Word + '%'
END
它不起作用,你建议采用这种搜索方法的方式?
答案 0 :(得分:2)
您无法在SQL中使用动态列名。
为了实现您的目标,您需要使用dynamic SQL。链接的文章对此主题进行了全面的讨论。
答案 1 :(得分:0)
Azize del,
ComboBox hamishe baiangare LookUp ast ke hamanande Table eist ke 2 sotoune Id va Describer darad。 Agar gharar ast ke meghdare entekhabie ComboBox be StoredProcedure ferestade beshe,pishnahad mikonam az Id e Bind shode be SelectedValue e ComboBox estefade beshe。 Nvarchar ro是SP ferestadan kare dorosti nist。
亲爱的先生/女士,ComboBox始终是信息系统中LookUp的替代品,就像一个只有两列Id和Describer的Table。如果您要将ComboBox的SelectedValue发送到StoredProcedure,我建议将SelectedValue的绑定值作为整数发送给它。然后你有很多选择来编写你的查询。使用Nvarchar发送LookUp值可能会在应用程序的未来产生许多副作用(相比之下,它在排序规则方面存在许多问题)。
干杯
将代码更改为:
USE [QueueDB]
GO
/****** Object: StoredProcedure [dbo].[SP_SelectDriver_ByNameAndField] Script Date: 09/07/2012 17:20:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_SelectDriver_ByNameAndField] (
@Word Nvarchar(100)
, @Field TinyInt
) As Begin
Select *
From Driver
Where Case When @Field = 1
And Column1 Like + N'%' + @Word + '%'
Then 1
When @Field = 2
And Column2 Like + N'%' + @Word + '%'
Then 1
When @Field = 3
And Column3 Like + N'%' + @Word + '%'
Then 1
Else 0
End = 1
;
Return 0;
END
您也可以使用其他方式:
USE [QueueDB]
GO
ALTER PROCEDURE [dbo].[SP_SelectDriver_ByNameAndField] (
@Word Nvarchar(100)
, @Field TinyInt
) As Begin
Declare @Command Nvarchar(Max);
Select @Command = N'
Select *
From Driver
Where '
+ Case When @Field = 1
Then 'Column1'
When @Field = 2
Then 'Column2'
When @Field = 3
Then 'Column3'
Else 'DefaultColumn'
End
+ N' Like + N''%'
+ @Word
+ N'%'''
;
Execute (@Command);
Return 0;
END