SELECT MAX('Id')를 테이블에서 setval()로 전달합니다.
합격하고 싶다(SELECT MAX).Id
송신원Table
마리아답의setval()
사용해 본 기능:
SELECT setval(`MySequence`, (SELECT MAX(`Id`) FROM `Table`));
근데 안 되더라고요. 저도 해봤어요.
SET @max_value = (SELECT MAX(`Id`) FROM `Table`);
SELECT setval(`MySequence`, @max_value);
어떻게 해야 하죠?
편집 질문을 잘못 올렸습니다.두 번째 코드에서 SET를 사용하고 있었는데 작동하지 않습니다.
편집 코멘트에서 말씀드린 것처럼 엔티티 프레임워크 핵심 이행에서 이 작업을 한 번만 수행하려고 합니다.내가 끝낸 것은 그 일을 실행한 것이다.SELECT MAX(Id) FROM Table
이행 코드로부터 그 값을 회복해, 나중에 그 값을 보간한다.$"SELECT setval('sequence', {value}, true)"
SET @max_value = (SELECT MAX(`Id`) FROM `Table`);
EXECUTE IMMEDIATE CONCAT('SELECT SETVAL(`MySequence`, ', @max_value, ')');
에select
,사용하다:=
변수를 할당하려면:
SELECT @max_value := MAX(`Id`) FROM `Table`;
SELECT setval(`MySequence`, @max_value);
값에 1을 추가할 수 있습니다.
할 수 있을 것 같아요.
SELECT setval(`MySequence`, MAX(Id))
FROM `Table`;
스탠드아론 스테이트먼트(쿼리가 아님)에서는 일반적으로 사용자 정의 변수에 값을 할당하기 위해 사용됩니다.대신 다음을 시도해 보십시오.
SET @max_value = (SELECT MAX(`Id`) FROM `Table`);
SELECT setval(`MySequence`, @max_value);
MariaDB 10.3.16 현재로는 불가능할 것 같습니다.
https://jira.mariadb.org/browse/MDEV-20111에서 개발자가 이 기능을 추가하거나 매뉴얼을 업그레이드하여 실행할 수 없음을 명확히 하기 위해 버그를 제기했습니다.
c# 코드의 Mysqlconnector를 사용하여 값을 선택하여 이 작업을 수행했습니다.
private long ReadMaxIdFromTable()
{
MySqlConnection connection = null;
try
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder();
var builderenv = builder.AddJsonFile("config/appsettings.json", optional: false, reloadOnChange: false)
.AddJsonFile($"config/appsettings.{environment}.json", false, false).AddEnvironmentVariables();
IConfigurationRoot configuration = builderenv.Build();
var connectionString = configuration.GetConnectionString("ConnectionStringName");
connection = new MySqlConnection(connectionString);
connection.Open();
var cmd = connection.CreateCommand() as MySqlCommand;
cmd.CommandText = @"SELECT MAX(`Id`) FROM `Table`";
var result = (long)cmd.ExecuteScalar();
return result;
}
catch (Exception)
{
throw;
}
finally
{
if (connection != null && connection.State != System.Data.ConnectionState.Closed)
{
connection.Close();
}
}
}
내가 원하는 만큼 깨끗하진 않지만, 일을 해낼 수 있어.
나중에 사용SETVAL
c# 코드에서 sql 문자열의 값을 다시 보간합니다.
var currentSeq = ReadMaxIdFromTable();
migrationBuilder.Sql($"SELECT SETVAL(`MySequence`, {currentSeq}, true);");
또한, 이 모든 것이Up()
데이터베이스에 도달하기 전에 실행되는 코드, 즉SELECT MAX(Id) FROM Table;
이행이 데이터베이스 조작을 개시하기 전에 필요한 값을 얻을 필요가 있습니다.
언급URL : https://stackoverflow.com/questions/57124881/pass-select-maxid-from-table-to-setval
'programing' 카테고리의 다른 글
헤더('Content-Type:text/plain')가 꼭 필요합니까? (0) | 2022.09.13 |
---|---|
어레이에 값이 포함되어 있는지 확인합니다. (0) | 2022.09.13 |
Python에서 싱글톤 만들기 (0) | 2022.09.13 |
json 개체로 반환할 여러 DB 쿼리가 있습니다. 더 깔끔한 접근 방식? (0) | 2022.09.13 |
PHP 치명적 오류: 클래스를 다시 닫을 수 없습니다. (0) | 2022.09.13 |