Sql 在DBCC checkident中使用内部查询
据我所知,DBCC checkident使用以下三个参数:Sql 在DBCC checkident中使用内部查询,sql,sql-server,Sql,Sql Server,据我所知,DBCC checkident使用以下三个参数: DBCC checkident('myTable', reseed, id_to_reset) 我希望使用子查询获得第三个参数,即id_to_reset,如下所示: DBCC checkident('myTable', reseed, SELECT ISNULL(MIN(Id),0) FROM myTable2) 到目前为止,SQL Server抛出语法错误,但我确信一定有办法做到这一点。我知道我可以使用变量并传入checkiden
DBCC checkident('myTable', reseed, id_to_reset)
我希望使用子查询获得第三个参数,即id_to_reset,如下所示:
DBCC checkident('myTable', reseed, SELECT ISNULL(MIN(Id),0) FROM myTable2)
到目前为止,SQL Server抛出语法错误,但我确信一定有办法做到这一点。我知道我可以使用变量并传入checkident来实现这一点,但出于某些原因,这正是我想要避免的。尝试先将值放入变量中:
DECLARE @id INT = (SELECT ISNULL(MIN(Id),0) FROM myTable2)
DBCC checkident('myTable', reseed, @id)
如果需要为多个表重新设定种子,可以在执行时覆盖变量:
DECLARE @id INT = (SELECT ISNULL(MIN(Id),0) FROM myTable2)
DBCC checkident('myTable', reseed, @id)
SET @id = (SELECT ISNULL(MIN(Id),0) FROM myTable3)
DBCC checkident('myTable3', reseed, @id)
避免使用变量的原因是什么?首先,我想减少代码行数。其次,我希望在同一查询中多次使用DBCC checkident来查询许多表,以便每次使用DBCC命令时都必须重命名变量。我相信代码的改进总是有余地的……首先,牺牲可读性来保存一行代码是一种糟糕的做法。其次,不要创建一堆变量,而是通过将其设置为一个新值,然后重新使用该变量来重写1个原始变量。您正在谈论添加少量代码,以使您的应用程序工作,并且它将是干净和可读的。除非你在玩代码高尔夫,否则要让你的代码易懂,而不是把所有东西都塞进一行。最后,为什么要在这么多表上重新设置标识?我理解您想要得出的结论,最后我想知道是否有一种使用子查询的方法。我很惊讶你对这个问题投了否定票,还没有给出答案。你试过把子查询放在parens中吗?