2008-12-22 54 views
3
print("select CustomerNo, CustomerName, Address, City, State, Zip, 
    Phone, Fax, ContactName, Email 
    from Customers where CustomerName like '%field%'"); 

大家好。這是一個簡單的問題,但我無法確定,因爲我通常對tsql和sql很新。Sql存儲過程與運算符變量

我用上面的存儲過程來做搜索。我的問題是'%field%'。你使用什麼變量,或者它在tsql中如何工作?例如「where Customers = @CustomerNo」。通配符怎麼樣?你如何傳遞變量和通配符?我想我可以在代碼中執行「%」+「field」+「%」,但有沒有辦法做到這一點?

回答

0

如果您使用=,則表示「平等」,不會使用通配符。

如果您使用僅在文本字段上工作的LIKE,它可以使用通配符。

您無法通過=獲得通配符匹配。

請注意,根據數據的不同,通配符搜索可能會執行表掃描,所以我會在允許之前確保這是您想要的。

舉例來說,這將做一個表掃描:

WHERE CustomerID LIKE '%1' 

即。所有擁有以1結尾的客戶標識符(即文本)的客戶。這無法用索引解決。

最後的想法。我不是100%確定的,我完全理解你在問什麼。請你澄清一下。 「通過變量和通配符」是什麼意思?

+0

你好。其他人發佈了符合我需要的答案。謝謝你們。 – Jack 2008-12-22 22:54:21

17

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

您可以連接通配符到您的字符串,然後使用字符串:

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

...WHERE CustomerName LIKE @Pattern 

否則你可以寫在SQL表達式涉及串聯:

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

沒有其他的靈丹妙藥爲了這。

+0

猜你的意思是:喜歡@模式 – devio 2008-12-22 22:51:08

2

這很簡單。 「=」和「贊」都是運營商。你可以在做完一個之後做的事情。

所以,如果在C#中使用SQLCLIENT電話,你可以說:

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