查询 - 错误在VB中为变量赋值

时间:2014-01-06 15:44:47

标签: sql vb6

我在VB6中查询以下代码:

SQL = " if object_id('tempdb..#MovSeq','U') is not null drop table #MovSeq;" & _
    " declare @Data_Inicio datetime, @Data_Fim datetime; set dateformat dmy; set @Data_Inicio = DataInicio; set @Data_Fim = DataFinal; set @Data_Fim = DateAdd(day, +1, @Data_Fim); " & _
    " with Mov as ( SELECT EI.Cod_Empresa, EI.Cod_Estoque, EI.Cod_Produto, 'E' as Tipo_Mov, E.Dta_Entrada as Data_Mov, EI.id_Doc as NF, EI.Qtde, EI.V_Unitario, EI.V_Total " & _
      " from Entrada_Itens as EI inner join Entrada as E on EI.Cod_Empresa=E.Cod_Empresa and EI.id_Doc=E.id_Doc " & _
      " where E.Dta_Entrada >= @Data_Inicio and EI.Cod_Empresa='" & Sys.Empresa & "' and EI.Cod_Estoque='" & dcEstoque.BoundText & "' and EI.Cod_Produto='" & dtProdutos.BoundText & "' " & _
    " Union " & _
    " SELECT SI.Cod_Empresa, SI.Cod_Estoque, SI.Cod_Produto, 'S', S.Dta_Entrada , SI.id_Doc, -SI.Qtde, SI.V_Unitario, SI.V_Total " & _
      " from Saida_Itens as SI inner join Saida as S on SI.Cod_Empresa=S.Cod_Empresa and SI.id_Doc=S.id_Doc " & _
      " where S.Dta_Entrada >= @Data_Inicio and SI.Cod_Empresa='" & Sys.Empresa & "' and SI.Cod_Estoque='" & dcEstoque.BoundText & "' and SI.Cod_Produto='" & dtProdutos.BoundText & "' " & _
    " Union " & _
    " SELECT Cod_Empresa, Cod_Estoque, Cod_Produto, 'A', @Data_Inicio, null, null, null, null " & _
      " From Estoque " & _
      " where Cod_Empresa='" & Sys.Empresa & "' and Cod_Estoque='" & dcEstoque.BoundText & "' and Cod_Produto='" & dtProdutos.BoundText & "') " & _
    " SELECT *, Seq= row_number() over (partition by Cod_Empresa, Cod_Estoque, Cod_Produto order by Data_Mov desc, Tipo_Mov desc) into #MovSeq from Mov; " & _
    " create unique clustered index IndMovSeq on #MovSeq (Cod_Empresa, Cod_Estoque, Cod_Produto, Seq); " & _
    " SELECT M.Cod_Empresa, M.Cod_Estoque, M.Cod_Produto, P.Descricao," & _
          " Estoque= case when M.Seq=1 then E.Qtde_Estoque else (E.Qtde_Estoque - (SELECT sum(Mi.Qtde) from #MovSeq as Mi " & _
                                  " Where Mi.Cod_Empresa = M.Cod_Empresa And Mi.Cod_Estoque = M.Cod_Estoque And Mi.Cod_Produto = M.Cod_Produto and Mi.Seq < M.Seq)) end " & _
      " from #MovSeq as M inner join " & _
           " Estoque as E on M.Cod_Empresa=E.Cod_Empresa and M.Cod_Estoque=E.Cod_Estoque and M.Cod_Produto=E.Cod_Produto inner join " & _
           " Produtos as P on M.Cod_Empresa=P.Cod_Empresa and M.Cod_Estoque=P.Cod_Estoque and M.Cod_Produto=P.Cod_Produto " & _
      " where Data_Mov < @Data_Fim " & _
         " order by M.Cod_Empresa, M.Cod_Estoque, M.Cod_Produto, Seq desc; " & _
    " drop table #MovSeq;"

当运行显示DataInicio作为原因

时,错误显示为“无效的columm名称”

我知道错误在于赋值变量。但如何解决。 谢谢你的帮助...

1 个答案:

答案 0 :(得分:0)

您的代码类型很容易发生SQL Injection次攻击......

您是否正确转义变量值?其中一个变量中的简单引号(')可以完全改变SQL字符串......

您应该考虑使用参数来传递值,而不是使用字符串连接来构建SQL命令。