DECLARE @sql VARCHAR(MAX)
SELECT @sql = X.[text()]
FROM
(SELECT 'truncate table '+ t.TABLE_NAME + ';' AS [text()]
FROM sysindexes i, INFORMATION_SCHEMA.TABLES t
WHERE t.TABLE_NAME = object_name(i.id)
AND t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_NAME NOT IN ('Test')
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME
HAVING MAX(i.rows) > 0
FOR XML PATH ('')) X
exec(@sql)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在这个问题中创建类似于上述的脚本,但是我得到了:
消息8155,级别16,状态2,行12
没有为“ X”的列1指定列名。消息207,级别16,状态1,第2行
无效的列名称'text()'
这是一个更简单的方法。这仍然是非常脆弱的,并且很有可能闯入……好吧……几乎每个地方的每个数据库,因为如果有表的外键,您就不能截断表。
declare @SQL nvarchar(MAX) = ''
SELECT @SQL = @SQL + 'truncate table '+ t.TABLE_NAME + ';'
FROM sysindexes i
join INFORMATION_SCHEMA.TABLES t on t.TABLE_NAME = object_name(i.id)
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_NAME NOT IN ('Test')
GROUP BY t.TABLE_SCHEMA
, t.TABLE_NAME
HAVING MAX(i.rows) > 0
select @SQL
--exec sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |