2010-12-10 61 views
13

从客户端应用程序我tyipically做:如何在management studio中编写参数化查询?

select * from table where Name = :Parameter 

,然后执行查询之前,我做

:Parameter = 'John' 

这些参数是一个搜索&更换,但传递给服务器的实际参数。由于我需要详细测试其中一些查询,我该如何在管理工作室中编写查询?

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

更新:

要去除这里的混淆我添加信息,以更好地表达myseld。

当我执行正常的查询我在SQL Server Profiler中看到

select * from table where Name = 'John' 

而当我执行一个参数化查询我看到这一点:

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

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

+0

这个更新几乎是我在我的答案中展示给你的...... – 2010-12-10 09:23:43

+0

好吧,你是对的。所以我得到的是当客户端应用程序以某种方式使用参数时,它会使用DELCARE解除变量。非常有趣,这有助于解决我遇到的问题。 – LaBracca 2010-12-10 11:42:44

+0

为了向您解释为什么我问这个问题,我将您重定向到我的最终问题:http://stackoverflow.com/questions/4408551/select-statment-performance-degradation-when-using-distinct-with-parameters – LaBracca 2010-12-10 11:53:09

回答

21

如何像

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

SELECT * 
FROM Table 
WHERE Name = @Parameter 
+0

不,这是“Serach并替换”,这样我不告诉sql_server它是一个参数。 – LaBracca 2010-12-10 08:57:50

+0

请参阅我的更新问题,让我明白我的意思。 – LaBracca 2010-12-10 09:20:55

0

由于除了阿德里安旁观者在你的代码,即回复,例如,如果你使用C#确保您通过封装下面为你学习
代码示例通过@parameter:

  using (SqlConnection conn = new SqlConnection(conString)) 
      { 
       conn.Open(); 

       SqlCommand cmd = new SqlCommand(userSql, conn); 
       cmd.Parameters.AddWithValue("@parameter", parameter); 


       conn.Close(); 

      } 

当然,以上是不完整的代码,但你会给出一个想法。