GO statements blowing up sql execution in .NET과 같은 문제가 발생했습니다. Matt Johnson이 제공하는 솔루션을 구현하려고 시도했으며 작동에 도움이 필요합니다. 저는 C#으로 몇 달간 작업했기 때문에 여전히 매우 녹색입니다.GO 실행시 'GO'구문 오류가 발생합니다.
어떻게 호출하나요? 나는
을 시도했지만 오류 얻을 :var cmd = SplitSqlStatements(cmd);
'Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'string'
완전히 Regex.Split 이해하지 마십시오을하지만 내 GO 문자열은 "\ 연구 NGO \ \ 연구 \ n"그래서 나는 것을 바꿀 것입니다
@"^\s*GO\s* ($ | \-\- .*$)"
에서@"^\r\nGO\r\n$ | \-\- .*$)"
으로 분할 하시겠습니까?| \-\- .*$
이 무엇인지 전혀 알지 못합니다.- 내 문자열은 +와 연결할하지만 난 볼 @ "시작 부분에. 내가 필요로하는이 평균은 없애 않음 +?
- 내 문자열은 '\ n'+ 어디 내가 삽입려고 +가 연결할 줄 바꿈, 이들은 System.Environment.Newline로 대체 할 수도 있고 완전히 제거해야
코드 : 내 문자열의
private static IEnumerable<string> SplitSqlStatements(string sqlScript)
{
// Split by "GO" statements
var statements = Regex.Split(
sqlScript,
@"^\s*GO\s* ($ | \-\- .*$)",
RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
// Remove empties, trim, and return
return statements
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x => x.Trim(' ', '\r', '\n'));
}
예 :
string sqlHeader = " Use " + "R04_FDW " + "\r\nGO\r\n" + "SET ANSI_NULLS ON" + "\r\nGO\r\n" + "SET QUOTED_IDENTIFIER ON" + "\r\nGO\r\n" + "SET ANSI_PADDING ON" + "\r\nGO\r\n";
string sqlName = "CREATE TABLE " + dwSchema + "." + dwTN + " (" + '\n';
string sqlNonCluster = "CREATE UNIQUE NONCLUSTERED INDEX [ak_" + dwTN + "__Sta3n_PrimaryKeys]" + " ON [" + dwSchema + "].[" + dwTN + "]" + '\n' + "(" + '\n';
SqlCommand cmd = new SqlCommand(sqlHeader + sqlName + sqlColumns + sqlFoot + sqlCluster + sqlNonCluster, vx130);
일단 문자열이 분할되면 foreach 루프에서 각 명령문을 실행해야합니까? 이런 일이 발생하는 코드가 있습니까? – Hylaean
문자열을 직접 작성하는 경우 왜 'GO'문만 포함 시켜서 제거 할 수 있습니까? –
참고로이 SQL에서는 배치를 구분하는 데 "GO"가 필요하지 않습니다. 그것은 모두 하나의'SqlCommand'로 실행될 수 있습니다. "USE"에서 끝까지. procs, 함수 또는 뷰를 작성하지 않는 한이 방법은 단일 exec를 복잡하게 만듭니다. –