[SQL] SQL의 이동과 동적 쿼리를 실행
SQLSQL의 이동과 동적 쿼리를 실행
DECLARE @script VARCHAR(MAX);
SET @script =
'
create table ali(id decimal(10,0));
drop table ali;
go
create table ali(id decimal(10,0));
drop table ali;
'
EXEC (@script);
쿼리 위에 실행할 때 오류 메시지가 발생했습니다. 당신이 해결이에 대한 아이디어가 있다면 알려주세요.
참고 : 만들고 단지, 예를 들면 만든 테이블을 삭제하기위한 위의 코드, 내가 가서 문을 다른 동적 쿼리가 있습니다. 이 대답을하지 마십시오.
DECLARE @script VARCHAR(MAX),
@script1 VARCHAR(MAX);
SET @script =
'
create table ali(id decimal(10,0));
drop table ali;
';
SET @script1 =
'
create table ali(id decimal(10,0));
drop table ali;
';
EXEC (@script);
EXEC (@script1);
해결법
-
==============================
1.GO 실제로 유효하지 않습니다 T-SQL이다 :
GO 실제로 유효하지 않습니다 T-SQL이다 :
당신은 당신의 동적 SQL에서 GO의 인스턴스를 제거하거나 (예 : 명령 줄에서 OSQL 등) 기사에 언급 된 도구 중 하나를 사용해야합니다. GO의 모든 인스턴스는 동적 SQL에서 제거하여 쿼리는 여전히 작동합니다.
-
==============================
2.난 그냥있어 여기에 모두가 "GO"키워드를 끊었 생각합니다.
난 그냥있어 여기에 모두가 "GO"키워드를 끊었 생각합니다.
해결책:
--Your Script modified by adding a single line of code: DECLARE @script nVarChar(MAX);--I changed from VarChar to nVarChar - you should always use nVarChar for Dynamic SQL. SET @script = ' create table ali(id decimal(10,0)); drop table ali; go create table ali(id decimal(10,0)); drop table ali; ' --In case you have apostrophes in your script, you must escape them for the Exec() command. - 03/14/2013 - MCR. SET @script = 'EXEC (''' + REPLACE(REPLACE(@script, '''', ''''''), 'GO', '''); EXEC(''') + ''');'--Just add this one line. PRINT @script --See the command used (will be truncated in Select/Print, but not when Executing). EXEC (@script);
동적 테이블에서 여러 문을 연결 솔루션을 찾고 사람들을 위해 :
--Example of compiling and chaining multiple DDL statments from data in a table: -- DDL (Data Definition Language). -- These are statements used to create, alter, or drop data structures. -- They MUST be run in a single Batch. -- The "GO" keyword is a SSMS syntax for splitting up batches - it is not an SQL keyword. DECLARE @DDL_Statements TABLE ( DDL nVarChar(MAX) ) INSERT INTO @DDL_Statements (DDL) SELECT 'create table ali(id decimal(10,0)); drop table ali;' UNION ALL SELECT 'create table ali(id decimal(10,0)); drop table ali;' DECLARE @SqlCommand nVarChar(MAX) = '' SELECT @SqlCommand = @SqlCommand + 'EXEC(''' + REPLACE(DS.DDL, '''', '''''') + '''); ' FROM @DDL_Statements as DS --In case you have apostrophes in your script, you must escape them for the Exec() command. - 03/14/2013 - MCR. PRINT @SqlCommand --See the command used (will be truncated in Select/Print, but not when Executing). EXEC (@SqlCommand)
-
==============================
3.@mellamokb에 의해 명시된 바와 같이 당신은 단순히 동적 T-SQL 쿼리에 GO를 사용할 수 없습니다.
@mellamokb에 의해 명시된 바와 같이 당신은 단순히 동적 T-SQL 쿼리에 GO를 사용할 수 없습니다.
당신이 당신의 질문의 두 번째 부분에 명시된 바와 같이, 별도의 SQL-쿼리를 실행하지 않기 때문에, 당신은 분할에 의해 자신 별도의 일괄 처리에서 쿼리를 멀리 얻을 수 있습니다.
당신은 UDF를 사용하여 GO에 쿼리를 분리 할 수있다. 분리 한 후, 분리 된 배치를 실행한다.
그러나 처음에 GO 문자열을 만든 다음 나중에 잠시 떨어져 휴식, 자연 생각하지 않습니다.
-
==============================
4.GO는 일괄 구분자이며, 다른 사람에 의해 지적 유효한 SQL하지 않습니다. 예를 들어 일괄 구분자로 사용할 수 COME, SQL Server 및 다른 텍스트를 입력 - 옵션 - - 쿼리 실행 도구 - 사실, 당신은 SSMS로 이동할 수 있습니다.
GO는 일괄 구분자이며, 다른 사람에 의해 지적 유효한 SQL하지 않습니다. 예를 들어 일괄 구분자로 사용할 수 COME, SQL Server 및 다른 텍스트를 입력 - 옵션 - - 쿼리 실행 도구 - 사실, 당신은 SSMS로 이동할 수 있습니다.
당신이 그렇게한다면 GO도 SSMS에서 인식되지 않습니다. 당신은 동적 SQL 일괄 구분자 없이도 실행해야합니다. 여기 GO의 필요성을 보지 않는다
주권
-
==============================
5.당신이 될 것이다 동적 SQL에서 GO를 사용하고자 할 때의 예 나는 데이터를 몇 테이블을 채울 필요가 있고 나는 그것을 실행할 시간을 나타내는과 n은 n은 GO를 사용하고 싶습니다.
당신이 될 것이다 동적 SQL에서 GO를 사용하고자 할 때의 예 나는 데이터를 몇 테이블을 채울 필요가 있고 나는 그것을 실행할 시간을 나타내는과 n은 n은 GO를 사용하고 싶습니다.
DECLARE @statement TABLE ( SqlCommand NVARCHAR(MAX) ) DECLARE @sqlCommand NVARCHAR(MAX) = 'INSERT INTO [dbo].[tbl_table1] ([Field1],[Field2],[Field3],[Field4],[Field5],[Field6],[Field7],[Field8],[Field9],[Field10],[Field11])SELECT ''a'',''b'',''c'',''d'',''e'',''f'',''g'',''h'',''i'',''j'',RAND(),RAND(),RAND() GO 10000' INSERT INTO @statement ( SqlCommand ) VALUES ( @sqlCommand ) SET @sqlCommand = REPLACE(@sqlCommand, '[tbl_table1]', '[tbl_table2]') INSERT INTO @statement ( SqlCommand ) VALUES ( @sqlCommand )
내가 복사 대신 할 수있는의 실행해야이 코드는 선택 문의 테이블을 생성 작동합니다
EXEC(@sqlCommand)
어떤 '10000'오류 근처에 잘못된 구문을 제공합니다.
from https://stackoverflow.com/questions/14473223/execute-dynamic-query-with-go-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] VARCHAR 변수는 WHERE 절에서 작동하지 않습니다 (0) | 2020.04.28 |
---|---|
[SQL] 함수의 동적 SQL 전화 (0) | 2020.04.28 |
[SQL] 간단한 PHP SQL 로그인 문제 해결 (0) | 2020.04.27 |
[SQL] 열 NOT NULL 제약 조건을 통해 집합 (0) | 2020.04.27 |
[SQL] 조인 된 테이블 C 럼의 구별 합계를 얻기 (0) | 2020.04.27 |