Jas*_*ell 12 sql t-sql sql-server
确保SQL可以重复运行而不会在后续运行中收到错误的最佳实践是什么?
例如
将现有数据导出到INSERT语句,并从头开始完全重新创建整个DB.
在创建它们之前删除表(不是最安全的事情,但是如果你知道你在做什么的话就会工作)
编辑:我正在寻找这样的东西:
IF EXISTS ( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND OBJECTPROPERTY(object_id, N'IsUserTable') = 1 )
DROP TABLE foo
Run Code Online (Sandbox Code Playgroud)
其他人是否使用这样或更好的陈述?
编辑:我喜欢Jhonny的建议:
IF OBJECT_ID('table_name') IS NOT NULL DROP TABLE table_name
Run Code Online (Sandbox Code Playgroud)
我这样做是为了添加列:
IF NOT EXISTS ( SELECT *
FROM SYSCOLUMNS sc
WHERE EXISTS ( SELECT id
FROM [dbo].[sysobjects]
WHERE NAME LIKE 'TableName'
AND sc.id = id )
AND sc.name = 'ColumnName' )
ALTER TABLE [dbo].[TableName] ADD [ColumnName]
Run Code Online (Sandbox Code Playgroud)
我认为确保脚本可重新运行的最重要的做法是...... 在对脚本进行任何更改后,多次对测试数据库运行它们.您遇到的错误应该会影响您的实践.
编辑
为了响应您对语法的编辑,我认为最好避免系统表支持系统视图,例如
if exists(Select 1 from information_schema.tables where table_name = 'sometable')
drop sometable
go
if exists(Select 1 from information_schema.routines where
specific_name = 'someproc')
drop someproc
Run Code Online (Sandbox Code Playgroud)
为了简化操作,我将Management Studio配置为将对象脚本化为可重新运行
| 归档时间: |
|
| 查看次数: |
12650 次 |
| 最近记录: |