我已經閱讀了許多類似的問題,但答案根本無效。在sql select * from HelloRow('o')
中運行此函數將不會返回任何行。正在運行HelloRow('one')
將返回名稱爲「one」的行。 fillrow方法不會做任何事情(只是讀取字符串)。t-sql命令參數通配符
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "HelloFillRow", DataAccess = DataAccessKind.Read, TableDefinition="message nchar(20)")]
public static IEnumerable HelloQuery(SqlString like)
{
ArrayList resultCollection = new ArrayList();
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
using (SqlCommand select = new SqlCommand(
"select name from test where name like @par"
, connection))
{
select.Parameters.Add("par", SqlDbType.NChar, 10).Value = like + "%";
using (SqlDataReader selectReader = select.ExecuteReader())
{
while (selectReader.Read())
{
SqlString nextName = selectReader.GetString(0);
resultCollection.Add(nextName.ToString());
}
}
}
}
return resultCollection;
}
相當肯定的問題是'NChar' VS'NVarchar' –
你想要一個字符串匹配?在這種情況下,你需要用百分號包裝'like',而不是隻有一個。 – bluevector
我注意到你正在將你的參數作爲'par'加入你的命令中,而不是'@par'。我認爲這會導致一個問題,但是你聲稱用'one'來調用你的函數確實有效...... –