Jus*_*tin 1 sql t-sql sql-server
我的数据库中有不同类型的模式.如果我想删除具有分段架构的表,我该如何修改此存储过程?
CREATE PROC sp_Truncate
AS
BEGIN
EXEC sp_MSforeachtable @command1 = 'TRUNCATE TABLE ?'
END
GO
Run Code Online (Sandbox Code Playgroud)
有什么办法可以传递模式名称的参数(类型varchar或nvarchar)吗?
它是安全使用Delete的语句没有where条款来代替truncate它,如果你有可能会失败referential constraints.试试这个查询
Declare @sql Nvarchar(max)=''
SELECT @sql += ' delete from ' + s.NAME + '.' + t.NAME
+' Go DBCC CHECKIDENT ('''+s.NAME + '''.''' + t.NAME+''', RESEED, 0) GO '
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
and s.name = 'schema_name' -- your schema name
Exec sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
光标版本:
DECLARE @s_name VARCHAR(128)
DECLARE @t_name VARCHAR(128)
DECLARE db_cursor CURSOR FOR
SELECT s.NAME as Schema_Nam , t.NAME as Table_Name
FROM sys.tables t
JOIN sys.schemas s
ON t.[schema_id] = s.[schema_id]
WHERE t.type = 'U'
and s.name = 'schema_name'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @s_name,@t_name
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql += ' delete from ' + s.NAME + '.' + t.NAME
+' Go DBCC CHECKIDENT ('''+s.NAME + '''.''' + t.NAME+''', RESEED, 0) GO '
FETCH NEXT FROM db_cursor INTO @s_name,@t_name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Exec sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |