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
다중 배치 GO
T-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
'source' 카테고리의 다른 글
MongoDB: 쿼리를 표준화할 수 없음: BadValue Projection에는 포함과 제외가 혼합되어 있을 수 없습니다. (0) | 2023.05.07 |
---|---|
"git --bare init" 저장소는 어떻게 사용합니까? (0) | 2023.05.07 |
Angular-cli 빌드로 사용자 지정 파일을 포함하는 방법은 무엇입니까? (0) | 2023.05.07 |
목표-C에서 self = [super init]가 0이 아닌지 확인해야 하는 이유는 무엇입니까? (0) | 2023.05.07 |
$198 결과를 배열 대신 개체로 변환 (0) | 2023.05.07 |