我在我的项目中使用IfExistsTable
函数;为了看到一张桌子的存在。
为此,我使用Select语句如下。
MASQLComm = New SqlCommand("SELECT COUNT(*) AS [RecCount] From sys.tables WHERE name Like '%" & tName & "%'", SQLConn)
RecCount = CInt(MASQLComm.ExecuteScalar)
之后我取RecCount
中返回的号码。到目前为止,数字为1
和0
所以我改变了True
或False
中的数字。
现在突然返回的号码为2
,我无法理解这意味着什么。
答案 0 :(得分:2)
Count返回表中的行数。你不应该期望它只是0或1。
您可以争辩说,一个名称不能超过一个表,但问题是您的查询使用like '%TableName%'
。因此,如果您有表MyTable
和BestTable
,并且想要检查Table
是否退出,则计数结果将为2,尽管没有具有此类名称的表。
您可以将select语句更新为:
select case when exists(select * from sys.tables where name = 'TableName') then 1 else 0 end
答案 1 :(得分:1)
该数字表示与您的like语句匹配的表的数量。例如,如果您有表
将“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
}
通过这种代码,您也可以显示匹配的行数。