标签: sp-msforeachtable

如何删除SQL Server数据库中的所有表?

我正在尝试编写一个完全清空SQL Server数据库的脚本.这是我到目前为止:

USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
Run Code Online (Sandbox Code Playgroud)

当我在Management Studio中运行它时,我得到:

命令已成功完成.

但是当我刷新表格列表时,它们仍然存在.我究竟做错了什么?

sql-server ssms sql-server-2008 sp-msforeachtable

163
推荐指数
12
解决办法
23万
查看次数

从Sql Server中删除所有视图

通过在SQL Server中使用此语句:

EXEC sp_msforeachtable 'DROP TABLE ?'
Run Code Online (Sandbox Code Playgroud)

我知道可以一次删除所有表.

是否有类似的观点陈述?我试过这个希望是幸运的:EXEC sp_msforeachview'DROP VIEW?' 但它不起作用!

sql sql-server-2008 sp-msforeachtable

27
推荐指数
3
解决办法
4万
查看次数

SQL Server:如何使服务器检查其所有检查约束?

看起来Enterprise Manager*生成的一些脚本(或者没有,它们无关紧要)创建了检查约束WITH NOCHECK.

现在,当任何人修改表时,SQL Server都会遇到失败的检查约束,并抛出错误.

我可以让SQL通过它的所有检查约束,并检查它们吗?

运行:

sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)

只启用以前禁用的检查约束,它实际上不会检查它们.

脚注

*SQL Server 2000

sql-server sql-server-2000 database-integrity check-constraints sp-msforeachtable

25
推荐指数
2
解决办法
2万
查看次数

如何从sp_msforeachtable中排除表

我知道sp_msforeachtable允许对所有表执行查询.

我有100个表,我想在97个表上执行相同的查询.

我正在使用此查询: EXEC sp_MSForEachTable "DELETE FROM ?"

是否可以排除某些表格?

sql sql-server sp-msforeachtable

22
推荐指数
3
解决办法
1万
查看次数

SQL Server sp_msforeachtable用法仅选择满足某些条件的表

我正在尝试编写此查询以查找具有特定列的所有表,并具有某些特定值.这就是我到目前为止所做的 -

EXEC sp_MSforeachtable 
@command1='
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=PARSENAME("?",2) AND TABLE_NAME=PARSENAME("?",1) AND COLUMN_NAME="EMP_CODE")
BEGIN
    IF (SELECT COUNT(*) FROM ? WHERE EMP_CODE="HO081")>0
    BEGIN
        SELECT * FROM ? WHERE EMP_CODE="HO081"
    END
END
'
Run Code Online (Sandbox Code Playgroud)

我希望我的意图很明确,我只想选择列所在的那些表,EMP_CODE在那些表中我想选择那些行EMP_CODE='HO081'.

编辑 -

现在它就像这样.但是我无法@EMPCODE在查询中替换变量.

DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
EXEC sp_MSforeachtable 
@command1='
    DECLARE @COUNT AS INT
    SELECT @COUNT=COUNT(*) FROM ? WHERE EMP_CODE='''+@EMPCODE+'''
    IF @COUNT>0
    BEGIN
        PRINT PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
        --PRINT ''DELETE FROM ''+PARSENAME("?",1)+'' WHERE EMP_CODE='''''+@EMPCODE+'''''''
    END
',@whereand='AND …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-server-2005 sql-server-2008 sp-msforeachtable

17
推荐指数
2
解决办法
6万
查看次数

从sp_msForEachTable运行时,由于QUOTED_IDENTIFIER,ALTER INDEX失败

当我尝试在表上重建索引时:

ALTER INDEX ALL ON [dbo].[Allocations] REBUILD
Run Code Online (Sandbox Code Playgroud)

工作正常.

但是当我打电话时

EXECUTE sp_msForEachTable 'ALTER INDEX ALL ON ? REBUILD'
Run Code Online (Sandbox Code Playgroud)

我到达同一张桌子,它失败了:

消息1934,级别16,状态1,行2
ALTER INDEX失败,因为以下SET选项具有不正确的设置:'QUOTED_IDENTIFIER'.验证SET选项是否正确,以便与计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作的索引视图和/或索引一起使用.


并确认它是相同的表:

EXECUTE sp_msForEachTable 'print ''Rebuilding ?'';
ALTER INDEX ALL ON ? REBUILD;
PRINT ''   Done ?'''
Run Code Online (Sandbox Code Playgroud)

给出了结果:

Rebuilding [dbo].[SystemConfiguration]
   Done [dbo].[SystemConfiguration]
Rebuilding [dbo].[UserGroups]
   Done [dbo].[UserGroups]
Rebuilding [dbo].[Groups]
   Done [dbo].[Groups]
Rebuilding [dbo].[UserPermissions]
   Done [dbo].[UserPermissions]
Rebuilding [dbo].[AllocationAdmins]
   Done [dbo].[AllocationAdmins]
Rebuilding [dbo].[Allocations]
Msg 1934, Level 16, State 1, Line 2
ALTER INDEX failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 reindex sp-msforeachtable

10
推荐指数
2
解决办法
3万
查看次数

如何在同一个查询中同时使用 sp_msforeachtable 和 sp_msforeachdb?

有什么方法可以引用在“sp_msforeachdb”循环内运行的“sp_MSforeachtable”循环内的表?

例如,在以下查询中,'?' 总是引用数据库:

DECLARE @cmd VARCHAR(8000);

SET @cmd = 'USE ?; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''?'', tb_foreach = ''?'' "'

EXEC sp_msforeachdb @command1 =@cmd
Run Code Online (Sandbox Code Playgroud)

导致:

 db_name        db_forearch    tb_foreach
 ServerMonitor  master         master
Run Code Online (Sandbox Code Playgroud)

我想要一些类似的东西:

 db_name        db_forearch    tb_foreach
 ServerMonitor  master         <TABLE_NAME>
Run Code Online (Sandbox Code Playgroud)

我应该改变什么?


解决了。按照肖恩的建议,我使用了我的 ow 光标。但是 Ben Thul 建议的 @replacechar 解决方案正是我正在寻找的。

DECLARE @cmd VARCHAR(8000);

SET @cmd = 'USE ^; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''^'', tb_foreach = ''?'' "'

EXEC sp_msforeachdb @command1 =@cmd, @replacechar = '^'
Run Code Online (Sandbox Code Playgroud)

sql-server sp-msforeachdb sql-server-2008 sp-msforeachtable

5
推荐指数
1
解决办法
3846
查看次数

sp_MSforeachtable order by

我正在使用sp_MSforeachtable我的数据库中获取特定表的行数.我希望这些按名称排序.

如何添加ORDER BY子句sp_MSforeachtable

sql t-sql sql-server sql-server-2008 sp-msforeachtable

1
推荐指数
1
解决办法
2819
查看次数

在查询中打印表名

我想对所有表执行查询,但我需要检查结果。如果我做:

exec sp_MSforeachtable @command1 = 
'
DBCC CHECKIDENT(''?'', NORESEED)
'
Run Code Online (Sandbox Code Playgroud)

结果如下:

检查身份信息:当前身份值“35”,当前列值“35”。
DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。
消息 7997,级别 16,状态 1,第 3 行
“DocumentsJobPositions”不包含标识列。

等等。有时没关系,有时我需要进行一些修复,所以我需要每个查询的每个表的名称!

我怎样才能做到这一点?

sql-server sql-server-2012 sp-msforeachtable

0
推荐指数
1
解决办法
1826
查看次数