我需要检查sql中是否存在表。
如果不是,则必须自动创建一个。
现在我研究并发现了这个编码:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[YourTable](
....
....
....
)
END
任何人都可以解释为什么它会说object_id = OBJECT_ID
以及我应该把它放在哪里?
答案 0 :(得分:77)
我喜欢这种语法:
if(object_id(N'[dbo].[YourTable]', 'U') is not null)
...
其中object_id将2 char类型的对象作为第二个参数。您可以在sys.objects documentation:
中找到下面列出的对象类型列表答案 1 :(得分:8)
检查表级对象是否存在的ISO SQL方法是INFORMATION_SCHEMA.TABLES视图
查看sys.objects没有错误,但是...... INFORMATION_SCHEMA.TABLES更具说明性 - 它是跨平台的(通常根本不重要但是仍然好的。)
我认为这对于新的编码器来说可能更具可读性:
DECLARE @tableName SYSNAME = 'tbfoo'
DECLARE @schemaNAme SYSNAME = 'fooSchema'
IF EXISTS ( SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @tableName AND TABLE_SCHEMA = @schemaName )
BEGIN
RAISERROR('%s exists in schema: %s', 0, 1, @tableName, @schemaName)
END
ELSE
BEGIN
RAISERROR('%s DOES NOT EXIST in schema: %s', 0, 1, @tableName, @schemaName)
END
不要担心RAISERROR命令 - 它只是一种打印格式化消息的好方法。
您可以查询INFORMATION_SCHEMA视图以了解其中包含的内容。
SELECT TOP 5 * FROM INFORMATION_SCHEMA.TABLES
如您所见 - 您可以按名称引用模式和目录,而不是使用OBJECT_ID()
查找其ID答案 2 :(得分:2)
object_id = OBJECT_ID(N'[dbo].[YourTable]')
object_id
是sys.objects
OBJECT_ID
是一个为您指定的对象返回ID
的函数,即YourTable
。
您正在将YourTable
的object_id与object_id
表中的sys.objects
列进行比较。您需要将YourTable
替换为您要检查的表名已存在。
答案 3 :(得分:1)
OBJECT_ID()
是一个返回Object ID的函数。请参阅文档:
返回架构范围的数据库对象标识号 对象
http://msdn.microsoft.com/en-us/library/ms190328.aspx
通过传递某些参数(即您的表格详细信息),它将返回一个ID。然后,您可以将其与sys.objects
表中的ID进行比较,以检查它是否存在。