在VB.NET中,谁可以设置包含特定表的所有数据库

时间:2018-05-03 13:34:16

标签: sql-server vb.net

在VB.NET中我试图返回所有具有特定表的数据库。我一直在使用的代码只轮询数据库,并且工作正常。当我在下面添加CASE语句以获得具有我需要的表的语句时,它将不返回任何内容。

strQuery = "SELECT [name] FROM sys.databases where create_date > '2016-07-01' and [name] not like '_Config_Options' order by create_date desc"

 sqlCon = New SqlConnection(strConn)
    Using (sqlCon)
        Dim sqlComm As SqlCommand = New SqlCommand(strQuery, sqlCon)
        sqlCon.Open()
        Dim sqlReader As SqlDataReader = sqlComm.ExecuteReader
        If sqlReader.HasRows Then
            While (sqlReader.Read())
                cmbDatabase.Items.Add(sqlReader.GetString(0))
            End While
        End If
        sqlReader.Close()
    End Using

上面的代码返回完整的数据库列表。

当我将strQuery更改为

strQuery = "SELECT [name] FROM sys.databases WHERE CASE WHEN state_desc = ''ONLINE'' THEN OBJECT_ID(QUOTENAME([name]) + ''.[dbo].[MyTable]'', ''U'') END IS NOT NULL order by create_date desc"

我一无所获。执行Dim sqlReader作为SqlDataReader = sqlComm.ExecuteReader后,代码跳转到End Using。我没有看到错误代码。

1 个答案:

答案 0 :(得分:0)

Joel Coehoom获得了回答。我删除了双单引号,它可以工作。

strQuery = "SELECT [name] FROM sys.databases WHERE CASE WHEN state_desc = 'ONLINE' THEN OBJECT_ID(QUOTENAME([name]) + '.[dbo].[MyTable]', 'U') END IS NOT NULL order by create_date desc"