我正在改变我最初创建的SQL Server中的存储过程,但它需要永远执行。所有其他SP在数据库中表现良好。我正在尝试使用此特定SP进行批量插入。
USE [HERO_G_E1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_CollectData]
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
BULK INSERT TMainData
FROM '\\MyServer\MyDbMaster\Datasets\\Data150324.txt'
WITH
(
FIELDTERMINATOR = '\t',
FIRSTROW = 2,
ROWTERMINATOR = '\n'
)
SELECT * FROM TMainData
COMMIT TRANSACTION
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH
END
答案 0 :(得分:1)
我注意到有时对某些物体进行ALTER,往往需要一段时间。我不知道为什么(可能有更多SQL Server知识的人可能知道)。其中一个似乎对我有用的方法就是删除对象,然后重新创建它。如果您不确定对象的所有特定特征,您可以随时右键单击该对象,然后脚本存储过程为>创建到>新的查询编辑器窗口,让自己有一个良好的开端
示例:
--You can preface your code so it will automatically drop it if it exists
IF OBJECT_ID('dbo.usp_CollectData') IS NOT NULL
DROP PROCEDURE dbo.usp_CollectData;
GO
CREATE PROCEDURE dbo.usp_CollectData
AS
BEGIN
/*Your Code Here*/
END;
GO