如何在管理工作室中编写参数化查询?

LaB*_*cca 17 sql-server parameters ssms

从客户端应用程序我做了:

select * from table where Name = :Parameter
Run Code Online (Sandbox Code Playgroud)

然后在执行查询之前我做

:Parameter = 'John'
Run Code Online (Sandbox Code Playgroud)

这些参数不是搜索和替换,而是传递给服务器的实际参数.由于我需要详细测试其中的一些查询,如何在管理工作室中编写查询?

我想用参数编写查询并给参数赋值.如何才能做到这一点?

更新:

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

当我执行正常查询时,我在sql server profiler中看到

select * from table where Name = 'John'
Run Code Online (Sandbox Code Playgroud)

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

exec sp_executesql N'select * from table 
where Name = @P1',N'@P1 varchar(8000)','John'
Run Code Online (Sandbox Code Playgroud)

这就是我说它不是搜索和替换的原因.

Adr*_*der 27

怎么样的

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

SELECT *
FROM Table
WHERE Name = @Parameter
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上可以使用与代码不同的执行计划运行,因为 SQL Server 能够优化“John”值的计划 (2认同)

Den*_*s T 7

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

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

EXEC sp_executesql
N'

SELECT * FROM table_t 
WHERE first_name = @parameter

',
N'@parameter VARCHAR(8000)',
N'John'
Run Code Online (Sandbox Code Playgroud)