【问题标题】:How do I output the value of a parameter in SQL after it has been inserted?插入后如何在SQL中输出参数的值?
【发布时间】:2013-04-17 08:50:42
【问题描述】:

是否可以在设置并插入SQL组件后检索带有参数值的SQL语句?

SQL 语句:

SELECT * FROM SomeTable
WHERE SomeColumn = :pSomeValue;

代码:

procedure LoadParams(aValue: string);
begin
  Qry.Close;
  Qry.ParamByName('pSomeValue').AsString := aValue;
  MessageDlg(Qry.SQL.Text, mtInformation, [mbOK], 0); // this does not show the value but the parameter name.     
  Qry.Open;
end;

我希望能够在打开语句之前看到它,但是当我现在尝试这个时,我得到的是参数名称而不是值。

【问题讨论】:

标签: sql delphi parameters nexusdb elevatedb


【解决方案1】:

查询参数通常在 DBMS 中被替换,即这些值是通过连接单独发送的,而不是作为 SQL 语句的一部分。如果您希望同时查看 SQL 和值,DB 的日志可能会帮助您。

【讨论】:

  • +1 作为select * from Invoice where CustomerID=:ID 的示例,这可以在 SQL-Profile exec sp_executesql N'select * from Invoice where CustomerID=@P1',N'@P1 int',12 中看到
【解决方案2】:

您可以做的一件事是复制参数并将其放入 SELECT 中:

SELECT :pSomeValueDuplicate AS paraminput, * FROM SomeTable
WHERE SomeColumn = :pSomeValue;

Qry.ParamByName('pSomeValue').AsString := aValue;
Qry.ParamByName('pSomeValueDuplicate').Value := Qry.ParamByName('pSomeValue').Value;

然后您可以检查字段:paraminput 以获取您用作输入的内容。 不知何故,我无法让 Delphi 在 1 个查询中两次使用相同的参数。

SELECT 'SELECT * FROM SomeTable WHERE SomeColumn ='+ :pSomeValueduplicate AS thesqlinput,* FROM SomeTable WHERE SomeColumn = :pSomeValue;

其实你只需要一个参数就可以做到:

SELECT 'SELECT * FROM SomeTable WHERE SomeColumn ='+ SomeColumn AS thesqlinput,* FROM SomeTable WHERE SomeColumn = :pSomeValue;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多