Database 仅在架构上截断表

Database 仅在架构上截断表,database,tsql,truncate,Database,Tsql,Truncate,我正在寻找一种只截断一个模式上所有表的方法。 我将获得该架构中所有表的列表: *从sys.objects中选择name、object\u id,其中schema\u id=SELECT schema\u id'seg'* 但我正在努力找到一种方法来截断结果集中的所有内容 谢谢你的意见 请参阅或尝试此脚本 DECLARE @SQL NVARCHAR(MAX) = '' SELECT @SQL = ( SELECT 'TRUNCATE TABLE [' + s.name + '].[' +

我正在寻找一种只截断一个模式上所有表的方法。 我将获得该架构中所有表的列表:

*从sys.objects中选择name、object\u id,其中schema\u id=SELECT schema\u id'seg'*

但我正在努力找到一种方法来截断结果集中的所有内容

谢谢你的意见

请参阅或尝试此脚本

DECLARE @SQL NVARCHAR(MAX) = ''

SELECT @SQL = (
    SELECT 'TRUNCATE TABLE [' + s.name + '].[' + o.name + ']' + CHAR(13)
    FROM sys.objects o WITH (NOWAIT)
    JOIN sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id]
    WHERE o.[type] = 'U'
        AND s.name = 'dbo'
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')

PRINT @SQL

--EXEC sys.sp_executesql @SQL
我还发现了…的用法,如果有人愿意:

EXEC sp_msforeachtable
       @command1 ='TRUNCATE TABLE ?'
      ,@whereand = ' And Object_id In (SELECT object_id FROM sys.objects WHERE 
                                       schema_id = 6)'

谢谢纳文!我还测试了EXEC sp_msforeachtable@command1='TRUNCATE TABLE?'、@wherend='和sys.objects中SELECT Object_id的Object_id,其中schema_id=6'