【问题标题】:Returned ID from SELECT statement从 SELECT 语句返回的 ID
【发布时间】:2011-05-21 18:36:13
【问题描述】:

我在我的项目中使用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,我不明白这是什么意思。

【问题讨论】:

  • 是是是你说的非常对。

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


【解决方案1】:

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

您可以争辩说不能有多个同名的表,但问题是您的查询使用了like '%TableName%'。所以如果你有表MyTableBestTable,并且你想检查Table 是否退出,count 的结果将是2,虽然没有这样的表。

您可以将 select 语句更新为如下所示:

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

【讨论】:

  • 是的,我可以将其用作替代方法。但我不想更改我的代码;最重要的是这个数字是多少?它代表什么?
  • @Lefteris Gkinis - 在我的回答中添加了更多细节。如果你想让它起作用,恐怕你需要改变你的查询。
  • 是的,您的回答是最准确的。我怎么说......它在正确的道路上......@Chris Pebble给了我想要的答案。也非常感谢,给你一份。
  • @Lefteris Gkinis - 很难过。我先回答,提供了解释和解决方案,但你不喜欢这个答案:(。
  • @Alex No No No 请你让我现在感觉很糟糕,因为正如我所解释的那样,你走在正确的道路上。但是这里的问题不是正确的道路,而是“问题的答案”,好吧:)
【解决方案2】:

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

  • 小部件
  • 产品
  • WidgetsInProducts

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

要解决此问题,您需要进行完全匹配,而不是像@Alex Aza 在他的回答中展示的那样。

【讨论】:

  • 是的,您在我的问题中有答案。非常感谢我给一个
【解决方案3】:

嗨,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
}

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

【讨论】:

  • @patric。我必须知道的是数字的含义。现在我有它了。非常感谢您有兴趣回答。
  • @Lefteris Gkinis ...不客气,但我认为您希望代码运行.. :)
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多