【问题标题】:Sql stored procedure Like Operator variableSql 存储过程 Like Operator 变量
【发布时间】:2008-12-22 22:44:02
【问题描述】:
print("select CustomerNo, CustomerName, Address, City, State, Zip,
    Phone, Fax, ContactName, Email  
    from Customers where CustomerName like '%field%'");

大家好。这是一个简单的问题,但我无法弄清楚,因为我对 tsql 和 sql 很陌生。

我使用上面的存储过程进行搜索。我的问题是'%field%'。您使用什么变量或它在 tsql 中如何工作?例如,“其中客户 = @CustomerNo”。通配符怎么样?您如何将变量与通配符一起传递?我想我可以在代码中做 "%" + "field" + "%" 但有没有办法不这样做?

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    通配符只是字符串文字的一部分,例如'%field%' 只是一个字符串。

    您可以将通配符连接到您的字符串上,然后使用该字符串:

    @Pattern = '%' + @CustomerName + '%';
    
    ...WHERE CustomerName LIKE @Pattern
    

    或者你可以在 SQL 中写一个涉及连接的表达式:

    WHERE CustomerName LIKE '%' + @CustomerName + '%'
    

    对此没有其他神奇的解决方案。

    【讨论】:

    • 猜你的意思是:LIKE @Pattern
    • 谢谢。我相信这就是我正在寻找的。​​span>
    【解决方案2】:

    这很简单。 "=" 和 "Like" 都是运算符。你可以在一个之后做什么,你可以在另一个之后做什么。

    所以,如果在 C# 中并使用 SQLClient 调用,您可以说:

    string value;
    ...
    value = "Some name";
    ...
    myCommand.CommandText = "Select...from Customers Where CustomerName Like @Var";
    myCommand.Parameters.AddWithValue("@Var", "%" + value + "%");
    myCommand.ExecuteNonQuery();
    

    【讨论】:

      【解决方案3】:

      如果使用 =,则表示“等于”,不会使用通配符。

      如果你使用 LIKE,它只适用于文本字段,它可以使用通配符。

      您无法使用 = 获得通配符。

      请注意,根据数据,通配符搜索可能会进行表扫描,因此我会在您允许之前确保这是您想要的。

      例如,这将进行表扫描:

      WHERE CustomerID LIKE '%1'
      

      即。所有具有以 1 结尾的客户标识符(即文本)的客户。这无法通过索引来解决。

      最后的想法。我不是 100% 确定我完全理解你在问什么。请你澄清一下。 “将变量与通配符一起传递”具体是什么意思?

      【讨论】:

      • 你好。其他人已经发布了符合我需要的答案。谢谢大家。
      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2010-12-03
      • 2011-06-06
      相关资源
      最近更新 更多