0

私は以下を変更する必要があります..

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

上記のコードは、データベース内のすべてのテーブルを切り捨てます。これは必要なものですが、「dim」スキーマの一部であるテーブルでのみ機能させたいと考えています。

例として、次のテーブルがあります。

dbo.sales dim.employee dim.office

dbo.sales テーブルではなく、"dim" スキーマ テーブルのみを切​​り捨てるスクリプトが必要です。

これは、PK/FK がないことを前提としています (PK/FK のドロップ/作成を処理する別のコードがあるため)。

どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

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]
...
于 2013-05-17T05:18:34.507 に答える
0
SELECT SCHEMA_NAME(schema_id) + '.' + name as name 
INTO   #tables
FROM   sys.tables
where SCHEMA_NAME(schema_id) = 'dim'
于 2013-05-16T20:22:26.563 に答える