0

我的搜索框

我想在选定的组合框项目(数据库中的字段)中搜索单词(文本框),我的存储过程是:

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

它不起作用,你建议用什么方法来做这个搜索方法?

4

2 回答 2

2

您不能在 SQL 中使用动态列名。

为了实现你想要的,你需要使用动态 SQL。链接的文章对此主题进行了全面的讨论。

于 2012-09-07T13:25:04.220 回答
0

阿齐兹德尔,

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 be SP ferestadan kare dorosti nist。

尊敬的先生/女士,

ComboBox 始终是信息系统中 LookUp 的替代品,就像只有两列 Id 和 Describer 的表。如果您要将 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
于 2012-09-07T13:28:05.677 回答