【发布时间】:2012-03-27 18:10:18
【问题描述】:
我正在用 C# 编写一个程序,该程序使用传递给 sp_executesql 的参数运行一些选择语句。我在测试时遇到的一个问题是,无论我是从 SQL Profiler 还是从 Visual Studio 中的手表执行的命令,参数的值都是在语句末尾指定的,而不是在-查询中的行。出于测试目的,我想要一种将参数值替换为参数的快速方法。
所以,而不是:
exec sp_executesql N'
SELECT CustomerName
FROM CustomerTable ct WITH(NOLOCK)
WHERE ct.CustomerId <> @CustomerId
AND ct.ItemId <> @ItemId
AND ct.TransactionId = @TransactionId'
,N'@CustomerId bigint,@ItemId nvarchar(1),@TransactionId nvarchar(30), @CustomerId = 3000, @ItemId = N'4', @TransactionId=N'43281'
我想要:
exec sp_executesql N'
SELECT CustomerName
FROM CustomerTable ct WITH(NOLOCK)
WHERE ct.CustomerId = 3000
AND ct.ItemId <> N'4'
AND ct.TransactionId = N'43281''
请不要过多关注示例的语法,因为它只是用于演示概念。有谁知道一个快速的方法来做到这一点?基本上,我希望将其替换为测试目的,因为这将使我更容易修改条件以测试它们如何影响返回的结果。我将不胜感激任何人都可以提供的帮助。谢谢。
【问题讨论】:
-
您可以手动浏览参数列表并将其值粘贴到查询中。否则,参数是在 SQL 引擎级别处理的优化,无法获取 SQL 用来处理的内部查询。能否提供用于生成动态 sql 命令的 C# 代码?
标签: sql parameters sp-executesql