【发布时间】:2019-08-14 16:26:18
【问题描述】:
我怀疑这个错误...我无法解决。你能帮我解决吗?
sql += Chr(13) & " "
If Not Agrupar = "R" Then
sql += Chr(13) & " GROUP BY contas_receber.NumTitulo, contas_receber.AnoTitulo, b.CodParcela, b.NumParcela"
sql += Chr(13) & " , contas_receber.DataLancamento, b.DataVencimento , b.ValorParcela, b.ValorAReceber"
sql += Chr(13) & " , CASE WHEN ISNULL(cli.NomeFantasia, func.Nome) WHEN ISNULL(func.Nome, forn.NomeFantasia) ELSE cli.NomeFantasia END"
sql += Chr(13) & " , contas_receber.Historico, b.vRetencao"
'sql += Chr(13) & " , ISNULL(cli.NomeFantasia, func.Nome), contas_receber.Historico, b.vRetencao"
sql += Chr(13) & " , emp.NomeFantasia, cli.Nomefantasia, func.Nome, cli.Nomefantasia, contas_receber.EmNomeFuncionario, contas_receber.EmNomeFornecedor"
sql += Chr(13) & " , contas_receber.NumFichaServico, contas_receber.PlacaFichaServico, pc.Conta, pc.Descricao"
End If
'sql += Chr(13) & " , CASE WHEN contas_receber.EmNomeFuncionario = 1 THEN func.Nome WHEN contas_receber.EmNomeFornecedor = 1 Then forn.NomeFantasia "
'sql += Chr(13) & " ELSE ISNULL(cli.NomeFantasia,cli.NomeFantasia ) END Cliente"
sql += Chr(13) & " ORDER BY contas_receber.AnoTitulo, contas_receber.NumTitulo "
【问题讨论】:
-
@laancelot - 它是 VB 代码,所以使用 ' 很好......但我不认为问题出在提交的代码中,这是一个 group by......什么WHERE 子句的代码是什么样子的?
-
ISNULL() 如果第一个值不为 NULL,则将采用第一个值,当第一个值为 NULL 时将采用第二个值。我认为您没有意识到 ISNULL() 函数的用途。看来您可能想要
WHEN cli.NomeFantasia IS NULL AND func.Nome IS NULL -
另外,您可以在 VB.NET 中使用与号 (
&) 进行字符串连接。虽然+在技术上有效,但将 + 和 & 混合使用会更难阅读。从另一个阅读代码的开发人员的角度来看,一种更简洁的方法是使用 StringBuilder 并对 SQL 的每个“行”执行 StringBuilder.AppendLine("WHERE x = 123") - 而不是添加所有这些 Chr(13)。 -
我强烈建议您在 Management Studio 或其他查询编辑器中编写您的查询,并让它在那里工作,然后再尝试对您在应用程序代码中拼凑在一起的查询进行故障排除。
-
我强烈建议您将您的查询移动到存储过程,而不是在您的应用程序中一起处理大量查询。这将是创建分层应用程序的第一步,而且它更容易调试。
标签: sql-server vb.net