从SELECT语句返回的ID

时间:2011-05-21 18:36:14

标签: sql vb.net sql-server-2008

我在我的项目中使用IfExistsTable函数;为了看到一张桌子的存在。

为此,我使用Select语句如下。

MASQLComm = New SqlCommand("SELECT COUNT(*) AS [RecCount] From sys.tables WHERE name Like '%" & tName & "%'", SQLConn)
RecCount = CInt(MASQLComm.ExecuteScalar)

之后我取RecCount中返回的号码。到目前为止,数字为10

所以我改变了TrueFalse中的数字。

现在突然返回的号码为2,我无法理解这意味着什么。

3 个答案:

答案 0 :(得分:2)

Count返回表中的行数。你不应该期望它只是0或1。

您可以争辩说,一个名称不能超过一个表,但问题是您的查询使用like '%TableName%'。因此,如果您有表MyTableBestTable,并且想要检查Table是否退出,则计数结果将为2,尽管没有具有此类名称的表。

您可以将select语句更新为:

select case when exists(select * from sys.tables where name = 'TableName') then 1 else 0 end

答案 1 :(得分:1)

该数字表示与您的like语句匹配的表的数量。例如,如果您有表

  • 窗口小部件
  • 产品
  • WidgetsInProducts

将“Widgets”传递给您的查询,它将匹配表“Widgets”和“WidgetsInProducts”。这不是你想要的行为。

要解决这个问题,你需要做一个完全匹配,而不是像@Alex Aza在答案中所说的那样。

答案 2 :(得分:0)

嗨Lefteris Gkinis 如果您不想更改查询,可以相应地检查 RecCount 变量 说

if(RecCount == 0)
{
// code what you were using for false condition 
}
else
{
// you got atleast one record 
// and in RecCount  you have number of matching rows
}

通过这种代码,您也可以显示匹配的行数。