`

判断数据库中表是否存在,并创建

阅读更多

//SQLServer 2000

 

IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[" + tableName + "]') AND type in (N'U')) "
   + " select top 0 * into " + tableName + " from FLOW_LOG; ";

 

//SQLServer 2008
 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + tableName + "]') AND type in (N'U')) "
     + " select top 0 * into " + tableName + " from FLOW_LOG; ";

 

sysobjects, sys.objects

Contains one row for each object (constraint, default, log, rule, stored procedure, and so on) created within a database. In tempdb only, this table includes a row for each temporary object.
 
name sysname Object name.
Id int Object identification number.
xtype char(2) Object type. Can be one of these object types:

C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = Inlined table-function
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure

uid smallint User ID of owner object.
 
 
  • list all the objects of any type of interest using the following:
SELECT * FROM sysobjects WHERE xtype = <type of interest>
  • In the special case of triggers, which are owned by their parent table, you might want to interrogate the database using a self-join, like this:
SELECT 
      Sys2.[name] TableName, 
      Sys1.[name] TriggerName, 
      CASE 
            WHEN Sys1.deltrig > 0 THEN'Delete' 
            WHEN Sys1.instrig > 0 THEN'Insert' 
            WHEN Sys1.updtrig > 0 THEN'Update' 
      END'TriggerType' 
FROM 
      sysobjects Sys1 JOIN sysobjects Sys2 ON Sys1.parent_obj = Sys2.[id] 
WHERE Sys1.xtype='TR'
ORDERBY TableName
  • sys.objects object catalog view contains a row for each user-defined, schema-scoped object that is created within a database. You can retrieve any user defined object details by querying sys.objects database.

Let us see one example of sys.objects database usage. You can run following query to retrieve all the information regarding name of foreign key, name of the table it FK belongs and the schema owner name of table.
USE AdventureWorks;
GO
SELECT name AS ObjectName,
OBJECT_NAME(schema_id) SchemaName,
OBJECT_NAME(parent_object_id) ParentObjectName, name, *
FROM sys.objects
WHERE type = ‘F’
GO

 Permissions

In SQL Server 2005 and later versions, the visibility of the metadata in catalog views is limited to securables that a user either owns or on which the user has been granted some permission. For more information, see Metadata Visibility Configuration.

 Examples

A. Returning all the objects that have been modified in the last N days

USE <database_name>;
GO
SELECT name AS object_name
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - <n_days>
ORDER BY modify_date;
GO

B. Returning the parameters for a specified stored procedure or function

USE <database_name>;
GO
SELECT SCHEMA_NAME(schema_id) AS schema_name
    ,o.name AS object_name
    ,o.type_desc
    ,p.parameter_id
    ,p.name AS parameter_name
    ,TYPE_NAME(p.user_type_id) AS parameter_type
    ,p.max_length
    ,p.precision
    ,p.scale
    ,p.is_output
FROM sys.objects AS o
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
ORDER BY schema_name, o.object_name, p.parameter_id;
GO

C. Returning all the user-defined functions in a database

USE <database_name>;
GO
SELECT name AS function_name
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
GO

D. Returning the owner of each object in a schema.

USE <database_name>;
GO
SELECT 'OBJECT' AS entity_type
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
    ,name
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'TYPE' AS entity_type
    ,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
    ,name
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'XML SCHEMA COLLECTION' AS entity_type
    ,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
    ,xsc.name
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
    ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';

 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_QueryStockWarning]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_QueryStockWarning]
GO

的含义:

dbo.sysobjects 为系统数据库master中的系统表sysobjects;

OBJECT_ID:返回数据库对象标识号。N是显式的将非unicode字符转成unicode字符,写作object_id(PerPersonData);

OBJECTPROPERTY:返回当前数据库中对象的有关信息。1表“真”。同样可以写成OBJECTPROPERTY(id, sUserTable) = 1;

if exists (select * from sysobjects where objectproperty(object_id('P_QueryStockWarning'),'isProcedure') = 1)
这句话判断存储过程'P_QueryStockWarning'是否存在,如果存在就删除该存储过程

分享到:
评论

相关推荐

    判断指定数据库中是否存在指定的表

    ### 知识点一:判断指定数据库中是否存在指定表的方法 在进行数据库操作时,我们经常需要检查某个特定的表是否存在于指定的数据库中。这不仅有助于提高程序的健壮性和容错性,还能帮助开发者更好地管理数据结构。...

    判断oracle数据库中是否存在新建表

    判断oracle数据库中是否存在新建表,如果存在则不创建表,不存在则执行建表语句;只需要传递建表语句就可以判断了

    在SQL Sever中判断数据库、表是否存在并新建的代码

    呕心沥血两星期,终于完成了用delphi根据用户配置在SQL Sever中判断数据库、表是否存在,如果不存在,新建用户配置文件中的数据库、数据表的功能。为了让广大像我曾经一样迷惘的初级程序员快速的掌握delphi开发Sql ...

    达梦数据库根据指定模式查看表是否存在

    达梦数据库查看指定模式下的表是否存在以及达梦数据库的常用语句!

    VB判断SQL表是否存在

    这就是在VB中判断SQL数据库中表是否存在的一种方法。这种方法适用于SQL Server,但如果你使用的是其他类型的数据库(如MySQL、Oracle等),查询语法可能会有所不同。对于其他数据库,你需要查阅相应的数据库文档,...

    利用MybatisPlus来实现对表的水平分表,全自动,可以首先判断表是否存在,不存在创建表

    利用MybatisPlus来实现对表的水平分表,全自动,可以首先判断表是否存在,不存在创建表,然后设计有定时任务,可以每个月月末的时候,去创建下一个分表程序

    Sql Server数据库中检查是否存在某张表

    有时候,我们的业务可能会这样要求:某张表是动态的,他要求每隔一段时间(如:一个月)自动生成一张结构相同的新表(如:日志表Log),这是我们要判断数据库中是否存在某张表,如果没有,则新建一张表,否者直接...

    java判断数据表是否存在,不存在创建

    里面有java判断一个数据表是否存在,不存在久创建该表

    详细讲解C#在向ACCESS中插入数据时判断数据是否已存在.pdf

    本文将详细介绍如何在使用C#语言时,通过SQL语句向Microsoft Access数据库插入数据,并在此过程中判断所需插入的数据是否已经存在。如果数据不存在,则继续执行插入操作;如果存在,则不执行插入操作。 首先,要...

    创建数据库.rar_-baijiahao_E4A DB数据库_e4a创建目录_e4a数据库 图片_e4a数据库表格

    本文将详细讲解如何在E4A中创建数据库,并涵盖从检测数据库文件到创建数据表的全过程。 首先,我们要理解E4A中的数据库概念。E4A支持SQLite数据库,这是一种轻量级的关系型数据库,适用于移动设备。SQLite数据库...

    VB升级ACCESS数据库(判断创建表和字段)

    以下是一个VB函数示例,用于判断指定的表是否存在于Access数据库中: ```vb Function TableExists(dbConnection As ADODB.Connection, tableName As String) As Boolean Dim rs As ADODB.Recordset Set rs = New ...

    判断SQL数据库中函数存储过程等是否存在的方法

    在SQL数据库管理中,经常会遇到需要验证某个对象(如表、存储过程、函数或视图)是否已经存在的场景。这通常是为了确保在执行创建、更新或删除操作之前不会发生重复或者冲突。以下是一些用于检查SQL数据库中这些对象...

    Sql Server中判断表、列不存在则创建的方法

    本篇文章将详细讲解如何在SQL Server中判断表和列是否存在,并展示如何在它们不存在时创建。 一、判断表中某列是否存在 1. **方法一**:使用`SYSOBJECTS`和`SYSCOLUMNS`系统视图 ```sql IF EXISTS ( SELECT 1 ...

    MySQL数据库:表的创建SQL语句.pptx

    if not exists ,加一个判断,只有该表不存在时才执行 engine=存储引擎,mysql支持多存储引擎,不同的表可以有不同的存储引擎 表的创建 显示数据库表结构语法格式 {describe | desc} 表名 [列名 | 通配符]; 说明: | ...

    NC6.5 数据库参考脚本及临时表空间配置.pdf

    脚本中通过条件判断是否存在同名数据库来决定是否删除旧数据库,这可以避免创建数据库时因已存在同名数据库而导致错误。此外,脚本还涉及到了数据库文件的初始大小、自动增长设置以及最大大小的配置,这对于数据库...

    自定义类,登陆验证,判断数据库是否有此数据

    本文将详细介绍一个基于C#语言实现的自定义类,该类主要用于判断数据库中是否存在指定的数据记录,并应用于登录验证。 #### 一、自定义类概述 该自定义类名为`Panduan`,其主要功能为通过执行SQL语句来判断数据库...

    在EXCEL中比较数据库表的字段是否一致

    例如,你可以创建一个新的列,使用IF函数检查一个表的字段是否在另一个表中存在。但这种方法依然需要大量的手动设置和调整,且当字段数量增多时,复杂度会急剧增加。 3. **VBA宏**:如果对Excel的Visual Basic for ...

    mysql 教程-创建数据库.pdf

    在创建数据库之前,可以使用 IF NOT EXISTS 语句来判断数据库是否存在。如果数据库已经存在,则不会创建新的数据库。 ``` CREATE DATABASE IF NOT EXISTS test; ``` 创建数据库的注意事项 在创建数据库时,需要注意...

    从Excel中读取数据导入到数据库中

    2. **创建表结构**:根据Excel数据的结构,在数据库中创建对应的表结构,确保字段类型与数据匹配。 3. **数据清洗**:处理合并单元格,截断或拆分超长文本,处理缺失值等。 4. **数据导入**:使用`to_sql()`方法将...

Global site tag (gtag.js) - Google Analytics