Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在DBCC checkident中使用内部查询_Sql_Sql Server - Fatal编程技术网

Sql 在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使用以下三个参数:

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中吗?