我想在表中重新标识标识列,但不是在当前正在使用的数据库中。其他数据库中的重置标识列(不在当前正在使用的数据库中)
这工作:
use database;
DBCC CHECKIDENT ('table', reseed, 0);
但是,我想要做这样的事情:
DBCC CHECKIDENT (database.[dbo].table, reseed, 0); -- works not
我想在表中重新标识标识列,但不是在当前正在使用的数据库中。其他数据库中的重置标识列(不在当前正在使用的数据库中)
这工作:
use database;
DBCC CHECKIDENT ('table', reseed, 0);
但是,我想要做这样的事情:
DBCC CHECKIDENT (database.[dbo].table, reseed, 0); -- works not
EXEC database..sp_executesql N'DBCC CHECKIDENT(''dbo.table'', reseed, 0);';
甚至:
DECLARE @t SYSNAME = N'dbo.table';
EXEC database..sp_executesql
N'DBCC CHECKIDENT(@t, reseed, 25);',
N'@t SYSNAME', @t;
此外,如果表是空的并没有任何FK引用或其他限制你可以使用这样做更容易...
TRUNCATE TABLE database.dbo.table;
...这恰好也补种IDENTITY
列。
不能截断 - 表被外键引用。 exec database..sp_execeutesql - 获取错误'。'附近的语法不正确。 – davor 2013-03-22 16:12:08
@达沃对不起,我没有用单引号括起来。你应该更新你的问题,因为我只是抓住你的语法。 :-) – 2013-03-22 16:13:55
如何使用EXEC执行USE和CHECKIDENT?
EXEC('USE database;DBCC CHECKIDENT (''dbo.table'', reseed, 0);')
不是吗?练习你的尤达? :-) – 2013-03-22 16:03:37