如何调整TSQL代码以仅截断昏暗模式的表?

时间:2013-05-16 20:17:15

标签: sql-server tsql stored-procedures

我有以下修改..

DECLARE @tablename AS VARCHAR (1000)
DECLARE @sql AS VARCHAR (1000)

IF OBJECT_ID('tempdb.dbo.#tables') IS NOT NULL
    DROP TABLE #tables

SELECT *
INTO   #tables
FROM   sys.tables

WHILE EXISTS (SELECT *
              FROM   #tables)
    BEGIN
        SELECT @tablename = name
        FROM   #tables
        SELECT @sql = 'truncate table ' + @tablename;
        PRINT @sql
        EXECUTE (@sql)
        DELETE #tables
        WHERE  name = @tablename;
    END

上面的代码将截断数据库中的所有表,这是我需要的,但是我只希望这个表适用于属于“暗淡”模式的表。

举个例子,我有以下表格。

dbo.sales dim.employee dim.office

我希望脚本只截断“dim”架构表而不是dbo.sales表。

这假设我没有任何PK / FK(因为我有另一个代码处理PK / FK的丢弃/创建)。

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:1)

试试这个 -

<强>查询:

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 = 'dim'
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')

PRINT @SQL

EXEC sys.sp_executesql @SQL

<强>输出:

TRUNCATE TABLE [dim].[test1]
TRUNCATE TABLE [dim].[test2]
TRUNCATE TABLE [dim].[test3]
TRUNCATE TABLE [dim].[test4]
...

答案 1 :(得分:0)

SELECT SCHEMA_NAME(schema_id) + '.' + name as name 
INTO   #tables
FROM   sys.tables
where SCHEMA_NAME(schema_id) = 'dim'