T-SQL删除多个表
我正在使用T-SQL脚本删除数据库中的所有约束和所有表,以便在执行时给我一个干净的记录,这似乎对约束很有效,但当调整段以清除表时,它会给我一条错误消息,代码如下:T-SQL删除多个表,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用T-SQL脚本删除数据库中的所有约束和所有表,以便在执行时给我一个干净的记录,这似乎对约束很有效,但当调整段以清除表时,它会给我一条错误消息,代码如下: declare @tableCommand varchar(255) declare tableCursor cursor for select 'drop table '+ t.name from sys.tables t where t.type = 'U' open tableCursor fetc
declare @tableCommand varchar(255)
declare tableCursor cursor for
select 'drop table '+ t.name
from sys.tables t
where t.type = 'U'
open tableCursor
fetch next from tableCursor into @tableCommand
while @@fetch_status = 0 begin
exec @tableCommand
fetch next from tableCursor into @tableCommand
end
close tableCursor
deallocate tableCursor
正如我所说,一段类似的代码可以很好地去除我的约束,但通过这段代码,我只得到了一个错误:
Msg 2812,第16级,状态62,第15行找不到存储过程“drop table calendar”
有什么想法吗?我想你错过了一些括号:
while @@fetch_status = 0 begin
exec (@tableCommand);
fetch next from tableCursor into @tableCommand
end
我想你错过了一些括号:
while @@fetch_status = 0 begin
exec (@tableCommand);
fetch next from tableCursor into @tableCommand
end
T-SQL
EXEC
用于调用存储过程
要执行动态SQL,可以使用sp_executesql
过程,例如
EXEC sp_executesql @tablecommand
参考资料:
T-SQL
EXEC
用于调用存储过程
要执行动态SQL,可以使用sp_executesql
过程,例如
EXEC sp_executesql @tablecommand
参考资料:
我不会使用
光标来执行此操作
SELECT ' Drop table ' + s.NAME + '.' + t.NAME
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
Exec sp_executesql @sql
注意:如果在表之间定义了任何外键
,则必须在删除表之前将其禁用。此外,如果存在任何绑定到模式的对象,则同样不能删除表
运行以下查询以禁用数据库中存在的所有外键
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
有关更多信息,我将不使用光标
SELECT ' Drop table ' + s.NAME + '.' + t.NAME
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
Exec sp_executesql @sql
注意:如果在表之间定义了任何外键
,则必须在删除表之前将其禁用。此外,如果存在任何绑定到模式的对象,则同样不能删除表
运行以下查询以禁用数据库中存在的所有外键
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
有关更多信息,请参见,但您可以使用EXEC的方式EXEC('dynamicsql')代码>如果将sql字符串括在括号中…EXEC用于存储过程,但可以将EXEC()用于命令。EXEC()是一个函数,不同于EXEC命令。但是您可以通过EXEC('dynamic sql')的方式使用EXEC代码>如果将sql字符串括在括号中…EXEC用于存储过程,但可以将EXEC()用于命令。EXEC()是一个函数,与EXEC命令不同。