您可以EXISTS
检查表名和架构。
IF NOT EXISTS (SELECT 'table does not exist' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'2015_10_2'AND TABLE_SCHEMA = 'dbo')
BEGIN
RAISERROR('The table doesn''t exist!!!!', 16, 1)
END
sp_rename
不会让您丢失表内容,它只会更改表引用名称并更新它的所有约束和索引引用。如果要重命名的表不存在,它也会引发错误。也许您想要的是将您的流程包装在事务中并在出现故障时回滚。
编辑:
对于基本事务处理,您可以使用以下内容。请阅读使用事务的文档,可能需要一段时间才能知道它是如何正常工作的。
IF OBJECT_ID('tempdb..#Test') IS NOT NULL
DROP TABLE #Test
CREATE TABLE #Test (Number INT)
SELECT AmountRecords = COUNT(1) FROM #Test -- AmountRecords = 0
BEGIN TRY
BEGIN TRANSACTION
-- Do your statements here
INSERT INTO #Test (Number)
VALUES (1)
DECLARE @errorVariable INT = CONVERT(INT, 'NotAnInteger!!') -- Example of error: can't convert
COMMIT
END TRY
BEGIN CATCH -- If something goes wrong
IF @@TRANCOUNT > 0 -- ... and transaction is still open
ROLLBACK -- Revert statements from the BEGIN TRANSACTION onwards
END CATCH
SELECT AmountRecords = COUNT(1) FROM #Test -- AmountRecords = 0 (the transaction was rolled back and the INSERT reverted)
基本上,您使用BEGIN TRANSACTION
启动还原点以在出现故障时返回。然后在COMMIT
您知道一切正常后使用 a(从那时起,其他用户将看到更改和修改将被保留)。如果出现故障(您需要TRY/CATCH
阻止来处理错误),您可以发出 aROLLBACK
来恢复您的更改。