【问题标题】:How to write a parametrized query in management studio?如何在 Management Studio 中编写参数化查询?
【发布时间】:2010-12-10 08:50:22
【问题描述】:

我通常从客户端应用程序:

select * from table where Name = :Parameter

然后在执行查询之前我做

:Parameter = 'John'

这些参数不是搜索和替换,而是传递给服务器的真实参数。由于我需要详细测试其中一些查询,我该如何在 management studio 中编写查询?

我想用参数编写查询并为参数赋值。如何做到这一点?

更新:

为了消除这里的混乱,我添加了信息以更好地表达我的自我。

当我执行一个在 sql server profiler 中看到的普通查询时

select * from table where Name = 'John'

当我执行参数化查询时,我看到:

exec sp_executesql N'select * from table 
where Name = @P1',N'@P1 varchar(8000)','John'

这就是为什么我说它不是搜索和替换。

【问题讨论】:

  • 这个更新几乎和我在我的回答中展示给你的一样......
  • 好吧,你是对的。所以我得到的是,当客户端应用程序以某种方式使用参数时,它会使用 DELCARE 标记变量。非常有趣,这有助于解决我遇到的问题。
  • 为了解释我为什么问这个问题,我将你重定向到我的最后一个问题:stackoverflow.com/questions/4408551/…

标签: sql-server parameters ssms


【解决方案1】:

怎么样

DECLARE @Parameter VARCHAR(20)
SET @Parameter = 'John'

SELECT *
FROM Table
WHERE Name = @Parameter

【讨论】:

  • 不,这是“Serach and replace”,这样我不是告诉sql_server它是一个参数。
  • 请查看我对问题的更新,以便您明白我的意思。
  • 这个答案实际上可以使用与代码不同的执行计划运行,因为 SQL Server 能够针对“John”值优化计划
【解决方案2】:

看起来您在更新时回答了自己的问题。

在这里为可能像我一样困惑的未来访问者重写。下面是如何在 SSMS 中编写参数化查询。如果您想分析代码运行的参数化查询的执行计划,这将很有帮助。

EXEC sp_executesql
N'

SELECT * FROM table_t 
WHERE first_name = @parameter

',
N'@parameter VARCHAR(8000)',
N'John'

【讨论】:

    【解决方案3】:

    除了 Adriaan Stander 的回答之外,例如,如果您在代码中使用 C#,您应该确保您已经通过了 @parametervia 封装。这是一个代码示例:

    using (SqlConnection conn = new SqlConnection(conString))
    {
        conn.Open();
    
        SqlCommand cmd = new SqlCommand(userSql, conn);
        cmd.Parameters.AddWithValue("@parameter", parameter);
    
    
        conn.Close();
    
    }
    

    此代码旨在为您提供一个想法,因此并不完整。

    【讨论】:

    • 这个答案与问题标签相矛盾。如果使用 SSMS,这是真的,但无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多