programing

'GO' 근처의 구문이 잘못됨

padding 2023. 7. 12. 22:18
반응형

'GO' 근처의 구문이 잘못됨

ADO.NET을 통해 단일 명령(단일 실행) 내에서 다음 SQL을 실행하려면 어떻게 해야 합니까?

ALTER TABLE [MyTable]
    ADD NewCol INT

GO

UPDATE [MyTable] 
    SET [NewCol] = 1

배치 구분자GO지원되지 않으며, 지원되지 않으면 두 번째 문이 실패합니다.

여러 개를 사용하는 것 외에 다른 해결책이 있습니까?command처형?

GO키워드는 T-SQL이 아니라 스크립트 파일의 실행을 여러 배치로 분리할 수 있는 SQL Server Management Studio 아티팩트입니다.예를 들어, SSMS에서 T-SQL 스크립트 파일을 실행할 때, 명령문은 다음과 같이 구분된 배치로 실행됩니다.GO키워드자세한 내용은 https://msdn.microsoft.com/en-us/library/ms188037.aspx 에서 확인할 수 있습니다.

이 문서를 읽어보면 sqlcmd 및 osql에서도GO.

SQL Server는 다음을 이해하지 못합니다.GO키워드따라서 동등한 것이 필요한 경우 배치를 개별적으로 분리하여 실행해야 합니다.

제거합니다.GO:

String sql = "ALTER TABLE  [MyTable] ADD NewCol INT;";
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
sql = "UPDATE [MyTable] SET [NewCol] = 1";
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();

당신은 그것을 위해 수업을 이용할 수 있을 것 같습니다.다음은 기사입니다.

C#: GO 문이 포함된 배치 T-SQL 스크립트 실행

SSMS(SQL Server Management System)에서는 쿼리 후 GO를 실행할 수 있지만 캐치가 있습니다.세미콜론과 GO를 같은 줄에 둘 수 없습니다.계산해 보세요.

효과:

SELECT 'This Works';
GO

이 기능도 작동합니다.

SELECT 'This Too'
;
GO

하지만 이것은 그렇지 않습니다.

SELECT 'This Doesn''t Work'
;GO

이 문제는 배치 구분 기호가 설정에서 변경된 경우에도 발생할 수 있습니다.SSMS에서 Tools --> Options를 클릭하고 Query Execution/SQL Server/General(쿼리 실행/SQL 서버/일반)으로 이동하여 배치 구분자를 확인합니다.

저는 방금 CRLF 줄 끝이 없는 스크립트로 인해 실패를 겪었습니다.스크립트를 닫았다가 다시 열면 해결 메시지가 표시되는 것 같습니다.또 하나 확인해야 할 것이 있습니다!

세미콜론을 넣었습니다.;그 후에GO그것이 내 실수의 원인이었습니다.

내 쿼리가 SSRS에서 작동하지 않는 이유를 확인하는 중에 이 문제를 발견했습니다.사용 안 함GOSSRS에서는 서로 다른 문 사이에 세미콜론을 사용합니다.

IF 문을 사용하고 잘못 닫은 경우에도 이 오류가 발생합니다.

IF 문이 한 줄보다 긴 경우 BEGIN/END를 사용해야 합니다.

효과:

IF @@ROWCOUNT = 0
PRINT 'Row count is zero.'

그러나 두 줄이 있는 경우 다음과 같이 표시됩니다.

IF @@ROWCOUNT = 0
BEGIN
PRINT 'Row count is zero.'
PRINT 'You should probably do something about that.'
END

SQL 쿼리 뒤에 'GO' 키워드를 같은 줄에 놓았을 때 다음과 같은 오류 메시지가 표시되었습니다.

insert into fruits (Name) values ('Apple'); GO

이것을 두 줄로 나누어 쓰면 됩니다.이게 누군가에게 도움이 될지도...

처음에 제거하려고 했습니다.GO 일의한문에 패턴 .(?:\s|\r?\n)+GO(?:\s|\r?\n)+더 많은 했습니다. regex는 SQL과 호환되지 않습니다.

하지만 @tim-schmelter 답변 덕분에 패키지를 사용하게 되었습니다.

string sqlText;
string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=FOO;Integrated Security=True;";
var sqlConnection = new System.Data.SqlClient.SqlConnection(connectionString);
var serverConnection = new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection);
var server = new Microsoft.SqlServer.Management.Smo.Server(serverConnection);

int result = server.ConnectionContext.ExecuteNonQuery(sqlText);

언급URL : https://stackoverflow.com/questions/25680812/incorrect-syntax-near-go

반응형