Tag: 存储过程

在存储过程中保留SQL与代码有什么优点和缺点

在您的C#源代码或Stored Procs中保留SQL的优点/缺点是什么? 我一直在和一位朋友讨论一个我们正在开发的开源项目(C#ASP.NET论坛)。 目前,大部分数据库访问都是通过在C#中内联SQL并调用SQL Server数据库来完成的。 所以我试图确定哪个对于这个特定的项目是最好的。 到目前为止我有: 代码中的优点: 更容易维护 – 不需要运行SQL脚本来更新查询 更容易移植到另一个数据库 – 没有过程端口 存储Procs的优点: 性能 安全

接受多个Id值的T-SQL存储过程

有没有一个优雅的方式来处理传递一个ID列表作为存储过程的参数? 例如,我想要我的存储过程返回的部门1,2,5,7,20。 在过去,我已经通过逗号分隔的ID列表,像下面的代码,但是觉得真的很脏。 我认为SQL Server 2005是我唯一适用的限制。 create procedure getDepartments @DepartmentIds varchar(max) as declare @Sql varchar(max) select @Sql = 'select [Name] from Department where DepartmentId in (' + @DepartmentIds + ')' exec(@Sql)

如何在C#程序中执行存储过程

我想从C#程序执行这个存储过程。 我已经将下面的存储过程写入SqlServer查询窗口并将其保存为stored1: use master go create procedure dbo.test as DECLARE @command as varchar(1000), @i int SET @i = 0 WHILE @i < 5 BEGIN Print 'I VALUE ' +CONVERT(varchar(20),@i) EXEC(@command) SET @i = @i + 1 END 编辑: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace AutomationApp { class Program { public […]

如何将数组传递到SQL Server存储过程

如何将数组传递到SQL Server存储过程? 例如,我有一个雇员名单。 我想用这个列表作为一个表,并与另一个表join。 但是,员工名单应该作为C#的parameter passing。

将存储过程的结果插入临时表中

如何做一个SELECT * INTO [temp table] FROM [stored procedure] ? 不是FROM [Table]和没有定义[temp table] ? 从BusinessLine中select所有数据到tmpBusLine工作正常。 select * into tmpBusLine from BusinessLine 我正在尝试相同的,但使用返回数据的存储过程,是不完全相同的。 select * into tmpBusLine from exec getBusinessLineHistory '16 Mar 2009' 输出消息: Msg 156,Level 15,State 1,Line 2关键字'exec'附近的语法不正确。 我已经阅读了几个创build与输出存储过程相同的结构的临时表的例子,这工作正常,但它不会提供任何列。

包含TRY CATCH ROLLBACK模式的嵌套存储过程?

我对以下模式的副作用和潜在问题感兴趣: CREATE PROCEDURE [Name] AS BEGIN BEGIN TRANSACTION BEGIN TRY […Perform work, call nested procedures…] END TRY BEGIN CATCH ROLLBACK TRANSACTION RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc] END CATCH END 据我所知,这种模式在使用单个过程时是合理的 – 过程将完成所有的语句而没有错误,或者它将回滚所有的操作并报告错误。 但是,当一个存储过程调用另一个存储过程来完成某个子单元的工作时(我们理解小过程有时自己会被调用),所以我看到一个与回滚有关的问题 – 一个信息性消息(级别16)发出说明The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. 。 我假设这是因为子过程中的回滚总是回滚最外层的事务,而不仅仅是在子过程中启动的事务。 我希望整个事情回滚和中止,如果有任何错误发生(和错误报告给客户端作为SQL错误),我只是不确定所有来自外层尝试回滚事务的副作用已经回滚了。 在每个TRY CATCH层执行回滚之前,可能需要检查@@TRANCOUNT ? 最后是客户端(Linq2SQL),它有自己的事务层: try { […]