在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。我没有看到错误代码。
答案 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"