我正在尝试创建一个备份表,而不必每次都重新创建它。如果表在下一次运行中已经存在,那么它应该只是截断表。
但它似乎没有起作用。它说backup_reportsettings
已经在数据库中了。任何人都可以帮助我吗?
--Only re-create table if table does not exist otherwise truncate the existing table.
IF NOT EXISTS (SELECT * FROM [Misc].sys.tables where name= 'dbo.backup_reportsettings')
CREATE TABLE [MISC].dbo.backup_reportsettings
(
[datestamp] [datetime] NULL,
[reportsettingid] [char](8) NOT NULL,
[description] [char](30) NOT NULL,
[formname] [char](30) NOT NULL,
[usersid] [char](8) NOT NULL,
[settings] [text] NOT NULL,
[notes] [varchar](255) NOT NULL,
[userdefault] [char](1) NOT NULL
)
ELSE
TRUNCATE TABLE [Misc].dbo.backup_reportsettings;
我做错了什么?注意:这是在交易中完成的。
答案 0 :(得分:4)
sys.tables
中的对象名称不具有作为名称一部分的架构。验证表是否存在时删除表模式:
IF NOT EXISTS (SELECT * FROM [Misc].sys.tables where name= 'backup_reportsettings')
答案 1 :(得分:3)
尽管使用了IF
,但SQL Server需要解析/编译脚本中的所有语句,因此当它看到CREATE TABLE
语句时,如果表已经存在,它会给你一个编译错误,即使IF
会在这种情况下阻止执行代码。
解决这个问题的方法是将CREATE TABLE
语句放在动态SQL中,在执行之前不会对其进行解析/编译。