如何将c#内联查询转换为用transact-sql编写的存储过程
本文关键字:transact-sql 存储过程 转换 查询 | 更新日期: 2023-09-27 17:58:44
我有很多使用.net框架在C#中内联编写的SQL查询。例如
string sMysql = @"
SELECT
[Something]
from Person where person_uid=12"
我希望它将其转换为存储过程,这些存储过程将用transaction SQL编写。
类似这样的东西:
CREATE PROCEDURE [dbo].[aspnet_AnyDataInTables]
@uid int
AS
BEGIN
SELECT
[Something]
from Person where person_uid=@uid
END
我可以手动完成,但我有很多内联查询需要转换。有没有办法通过程序来完成这项繁忙的工作?
对于您的特定示例,抛出存储过程的想法,并将代码片段更改为以下内容:
// initialize UID value and SQL query with parameter placeholder
int uid = 12;
sql = "SELECT [Something] FROM [Person] WHERE [person_uid] = @UID";
// initialize connection and open
using (SqlConnection connection = new SqlConnection("<connection string>")
{
SqlCommand command = new SqlCommand(sql, connection)
// add UID parameter
command.Parameters.Add(new SqlParameter("UID", uid);
try
{
connection.Open();
// execute and read results
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// process results
}
}
catch (Exception ex)
{
// handle exceptions
}
}
正如问题注释中所述,存储过程并不一定比内联参数化查询快。SQL Server甚至会缓存未参数化查询的执行计划,但我更喜欢参数的显式声明。
如果您想了解更多信息,请参阅这篇关于SQL Server 2008执行计划缓存和重用的文章。