source

T-SQL에서 데이터베이스 이름에 변수를 사용하는 방법은 무엇입니까?

ittop 2023. 5. 7. 11:52
반응형

T-SQL에서 데이터베이스 이름에 변수를 사용하는 방법은 무엇입니까?

스크립트의 여러 위치에서 데이터베이스 이름을 사용하고 있으며, 데이터베이스 이름을 빠르게 변경할 수 있기를 원하므로 다음과 같은 것을 찾고 있습니다.

DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'

CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE 
GO

하지만 효과가 없습니다.그렇다면 이 코드를 쓰는 올바른 방법은 무엇일까요?

{SERVERNAME} 자리 표시자를 사용하여 전체 스크립트를 템플릿 문자열에 넣습니다.그런 다음 다음을 사용하여 문자열을 편집합니다.

SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)

그리고 나서 그것을 실행합니다.

EXECUTE (@SQL_SCRIPT)

3년 동안 아무도 내 코드가 작동하지 않는다는 것을 알아채지 못했다는 것을 믿기 어렵습니다!

그럴수는 없어요.EXEC다중 배치 GOT-SQL 문이 아닌 배치 구분 기호입니다.세 개의 분리된 끈을 만드는 것이 필요합니다, 그리고 나서.EXEC각각의 대체 후.

저는 단일 템플릿 문자열을 분할하여 여러 행으로 분할함으로써 "똑똑한" 무언가를 할 수 있다고 생각합니다.GO저도 ADO에서 해봤어요.NET 코드.

'서버네임'이란 단어는 어디서 온 거지?

다음은 방금 테스트한 코드입니다(어떤 코드가 작동하는지).

DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'TestDB'

DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)

SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'

DECLARE @SQL_SCRIPT VARCHAR(MAX)

SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)

모드를 사용할 수도 있습니다(Management Studio의 "쿼리" 메뉴에서 이 모드를 사용 가능으로 설정).

:setvar dbname "TEST" 

CREATE DATABASE $(dbname)
GO
ALTER DATABASE $(dbname) SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE $(dbname) SET RECOVERY SIMPLE 
GO

편집:

SQLCMD 도구를 통해 매개 변수를 설정하려면 이 MSDN 문서를 확인하십시오.

유감스럽게도 해당 형식의 변수로 데이터베이스 이름을 선언할 수 없습니다.

수행하려는 작업의 경우 EXEC() 문으로 문을 묶어야 합니다.그래서 다음과 같은 것을 가질 수 있습니다.

DECLARE @Sql varchar(max) ='CREATE DATABASE ' + @DBNAME

그럼 전화해요

EXECUTE(@Sql) or sp_executesql(@Sql)

sql 문자열을 실행합니다.

테이블 만들기 문에는 변수를 사용할 수 없습니다.제가 제안할 수 있는 가장 좋은 방법은 전체 쿼리를 문자열로 작성하고 실행하는 것입니다.

다음과 같은 방법을 사용해 보십시오.

declare @query varchar(max);
set @query = 'create database TEST...';

exec (@query);

언급URL : https://stackoverflow.com/questions/727788/how-to-use-a-variable-for-the-database-name-in-t-sql

반응형