Sql存储过程与Operator变量类似

时间:2008-12-22 22:44:03

标签: sql-server tsql

print("select CustomerNo, CustomerName, Address, City, State, Zip,
    Phone, Fax, ContactName, Email  
    from Customers where CustomerName like '%field%'");

大家好。这是一个简单的问题,但我无法想象,因为我对tsql和sql很新。

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

3 个答案:

答案 0 :(得分:17)

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

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

@Pattern = '%' + @CustomerName + '%';

...WHERE CustomerName LIKE @Pattern

否则你可以在SQL中编写一个涉及连接的表达式:

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

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

答案 1 :(得分:2)

很简单。 “=”和“喜欢”都是运营商。你可以在一个接一个地做之后做什么。

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

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

答案 2 :(得分:0)

如果你使用=,你说“相等”,它不会使用通配符。

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

你无法使用=。

获得通配符匹配

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

例如,这将进行表扫描:

WHERE CustomerID LIKE '%1'

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

最后的想法。我不是百分百肯定我完全理解你在问什么。你能澄清一下吗?具体是什么意思“传入一个变量和通配符”?