当前位置: 首页 > 面试题库 >

动态SQL脚本以生成删除表语句列表

公孙鸿才
2023-03-14
问题内容

我列出了需要从SQL Server中删除的表(大约100 ++)。以下是我将使用的示例代码

IF OBJECT_ID('dbo.DS_Area_TBL', 'U') IS NOT NULL
drop table dbo.DS_Area_TBL
Print 'dbo.DS_Area_TBL has been dropped'

我需要将表名100 ++时间替换为其他表名。如何编写可以自动生成查询列表的动态sql脚本?


问题答案:

您可以先生成脚本,然后使用动态sql执行:

CREATE TABLE a(a INT);
CREATE TABLE b(a INT);
CREATE TABLE c(a INT);
CREATE TABLE d(a INT);
CREATE TABLE e(a INT);

CREATE TABLE tab(tab_name SYSNAME);   -- here are table names stored
INSERT INTO tab VALUES ('a'),('b'),('c'),('d'),('e');


-- main part
DECLARE @sql NVARCHAR(MAX);

SELECT @sql = STUFF((SELECT ' ' +  FORMATMESSAGE(
'IF OBJECT_ID(''%s'', ''U'') IS NOT NULL 
BEGIN
   DROP TABLE %s;
   PRINT ''%s has been dropped '';
END
', QUOTENAME(tab_name),QUOTENAME(tab_name),QUOTENAME(tab_name))
                   FROM tab
                   FOR XML PATH('')), 1, 1, '');

PRINT @sql;   -- for debug

EXEC [dbo].[sp_executesql]
    @sql;

如果您使用的版本SQL Server低于2012,则需要FORMATMESSAGE使用字符串串联进行更改+

您可以通过修改模板轻松地使用自定义架构扩展此脚本:

'IF OBJECT_ID(''%s'', ''U'') IS NOT NULL 
    BEGIN
       DROP TABLE %s;
       PRINT ''%s has been dropped '';
    END
'

输出:

IF OBJECT_ID('[a]', 'U') IS NOT NULL 
BEGIN
   DROP TABLE [a];
   PRINT '[a] has been dropped ';
END
 IF OBJECT_ID('[b]', 'U') IS NOT NULL 
BEGIN
   DROP TABLE [b];
   PRINT '[b] has been dropped ';
END
 IF OBJECT_ID('[c]', 'U') IS NOT NULL 
BEGIN
   DROP TABLE [c];
   PRINT '[c] has been dropped ';
END
 IF OBJECT_ID('[d]', 'U') IS NOT NULL 
BEGIN
   DROP TABLE [d];
   PRINT '[d] has been dropped ';
END
 IF OBJECT_ID('[e]', 'U') IS NOT NULL 
BEGIN
   DROP TABLE [e];
   PRINT '[e] has been dropped ';
END


 类似资料:
  • 问题内容: 我正在尝试执行这样的mysql查询 它显示这样的错误 我该如何实现? 问题答案: 在查询中动态表名的使用最好与 Prepared Staments一起使用 ,在mysql中也可以使用串联功能 您也可以针对删除查询执行此操作

  • 问题内容: 是否可以通过Jdbc模板在SQL查询中生成任意“ in()”列表: 例: “从t中选择*,其中c在(#)中”,但是’#’可以是仅在运行时才知道的任意值列表。 问题答案: 是的,如果你使用使用命名参数,则可能在Spring中。List参数可以设置为: 在这种情况下,当使用s 替换命名参数时,Spring会根据实际列表的大小在内部使用所需数量的占位符创建SQL查询。

  • 我们有一个IT部门的客户,他们坚持在升级之前以脚本的形式获取数据库更新(他们希望在实现更新之前“阅读”更新)。 作为flyway的狂热用户,它让我想到了一种根据更新从flyway生成脚本并将此脚本发送给IT的方法。如果不存在,此脚本至少需要创建版本表,检查版本并应用所需的更新。它当然是数据库供应商专有的(在我的情况下是Oracle)。 这将允许我们在开发环境中使用flyway自动运行更新,并为测试

  • 请考虑以下代码 它将在屏幕上打印24。 现在假设我在枚举中有更多的值,并且我定义了类特征的所有相应模板特化。 备注: 我必须使用它的情况要复杂得多,自动操作会非常有帮助。 使用switch语句对我来说很重要,因为可以实现速度(速度对我的应用程序至关重要)。 谢谢! null > 在我的实际应用程序中,枚举包含几乎50个不同的值,它将在将来被扩展(希望由其他人扩展)。枚举包含连续值。 类“trait

  • 本文向大家介绍必须会的SQL语句(二) 创建表、修改表结构、删除表,包括了必须会的SQL语句(二) 创建表、修改表结构、删除表的使用技巧和注意事项,需要的朋友参考一下 1.创建数据库表 2.删除表 Drop table 表名   3.修改表结构 --增加列 Alter table 表名 Add 列名 类型 --删除列 Alter table 表名   drop cloumn 列名 --修改列,修改