SQL字符串中的运行时参数未获取其值ExecuteNonQuery失败,没有运行时错误

时间:2013-11-27 19:05:31

标签: sql-server vb.net tsql stringbuilder

以下代码甚至不引发异常,参数@ p1,@ p2和@ p3没有得到运行时值:ExecuteNonQuery返回零

1 个答案:

答案 0 :(得分:1)

如果您有权访问开发服务器,请运行探查器以查看实际传递给SQL Server引擎的内容。

另外,在VB.NET代码中添加一些调试行。我确信有些事情已经结束。

PS:以文本格式向我们展示最终查询。所有字符串附加都使得阅读更加困惑。

可以删除这些陈述。

DECLARE @cur_date_time datetime;  
SELECT @cur_date_time = getdate(); 

只需将第一行更改为第二版。

AND d.DateModified >= @cur_date_time  
AND d.DateModified >= getdate() 

我会使用较新的连接语法。请注意,在进行内联getdate()更改后,我注意到您在交叉连接关系中有表a,b和c。 IE - 他们没有加入密钥。这是你真正想要的。

INSERT INTO 
    aic_global_change_xref(ChangeTableGUID, ChangeRecordGUID, GlobalChangeGUID)  
SELECT  
    a.GUID as ChangeTableGUID, 
    d.GUID as ChangeRecordGUID, 
    b.GUID as GlobalChangeGUID  
FROM  
    aic_change_table a
    aic_global_change b
    aic_rationale c 
LEFT JOIN
    aic_obs_set_obs_set_obs_item_xref_chg d on c.GUID = d.RationaleGUID 
LEFT JOIN
    aic_obs_set e ON d.ParentObsSetGUID = e.GUID  
LEFT JOIN
    dbo.aic_obs_set f ON d.ChildObsSetGUID = f.GUID  

WHERE 
  f.GUID = @p1 and 
  d.ParentObsSetGUID = @p2 and
  c.RationaleText = @p3 and 
  d.DateModified >= getdate()  and 
  a.ChangeTableName = 'aic_obs_set_obs_set_obs_item_xref_chg' and
  b.GlobalChangeCode = 'EDITS'; 

我会接受我给你的代码,把它放到SSMS中并定义@ p1,@ p2和@p3。看看你得到的结果是什么。

我将所有内容更改为左连接,以便数据不会被丢弃。由于我不了解您的业务逻辑并且没有您的数据集,因此剩下的工作由您决定。

祝你好运!