我从头开始创建一个新的SQL Server Azure数据库。我想建立一个强大的源代码控制,所以我要小心如何创建我的所有表。
检查表是否存在的最佳方法是什么,如果它还不存在,只执行我的CREATE TABLE
语句?我正在将动态SQL传递给检查表存在的存储过程,但这是如此限制。必须有一种首选方式来实现这一目标。我的意思是我可以在每个查询前面加上:
IF NOT EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].j[myTable]') AND type in(N'U'))
BEGIN
CREATE TABLE myTable(....)
END
但这很重复。
答案 0 :(得分:0)
更简单:
IF NOT EXISTS (SELECT * FROM sys.tables WHERE Name = N'myTable')
CREATE TABLE myTable .......
创意:使用更集中的 sys.tables
目录视图,而不是包罗万象的sys.objects
- 那么你就不必记住那些相当不直观的{{1}值... - 但是,是最安全的方法来执行此类代码。
从SQL Server 2016开始,您还可以使用
type
命令(这是新的 - 见这里:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/)