我有以下修改..
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的丢弃/创建)。
任何帮助都将不胜感激。
感谢。
答案 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'