[SQL] 어떻게 .. SQL 서버에서 전역 변수를 선언하려면?
SQL어떻게 .. SQL 서버에서 전역 변수를 선언하려면?
나는 다른 DB와 다른 쿼리에 대해 동일한 값을 사용하려면
처럼
DECLARE @GLOBAL_VAR_1 INT = Value_1
DECLARE @GLOBAL_VAR_2 INT = Value_2
USE "DB_1"
GO
SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_1
AND "COL_2" = @GLOBAL_VAR_2
USE "DB_2"
GO
SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_2
그러나 그 오류를주는.
하나는 그것을 할 수있는 방법 ...을 제안 할 수 있습니까?
해결법
-
==============================
1.거래-SQL에서 전역 변수를 선언 할 수있는 방법은 없습니다. 당신이 당신의 변수를 원하는 모든 경우, 하나의 스크립트의 배치를 통해 액세스 할 수 있습니다를 들어, SQLCMD 도구 또는 SSMS의 SQLCMD 모드를 사용하고 같은 해당 도구 / 모드 별 변수를 정의 할 수 있습니다 :
거래-SQL에서 전역 변수를 선언 할 수있는 방법은 없습니다. 당신이 당신의 변수를 원하는 모든 경우, 하나의 스크립트의 배치를 통해 액세스 할 수 있습니다를 들어, SQLCMD 도구 또는 SSMS의 SQLCMD 모드를 사용하고 같은 해당 도구 / 모드 별 변수를 정의 할 수 있습니다 :
:setvar myvar 10
다음과 같이 사용할 :
$(myvar)
SSMS SQLCMD 모드를 사용하려면 :
-
==============================
2.당신은 SQLServer에 글로벌 변수를 선언 할 수 없습니다.
당신은 SQLServer에 글로벌 변수를 선언 할 수 없습니다.
당신이 Management Studio를 사용하는 경우 @Lanorkin 지적처럼 당신은 SQLCMD 모드를 사용할 수 있습니다.
그렇지 않으면 세션 및 연결 중에 볼 수있는 하나의 변수를 저장하는 데 CONTEXT_INFO를 사용할 수 있지만, 그 후 사라질 것입니다.
만 진정한 글로벌 (## yourTableName 이름) 글로벌 임시 테이블을 만들고, 거기 변수를 저장하는 것입니다 만, 모든 연결이 닫힐 때 그 또한 사라집니다.
-
==============================
3.당신은 글로벌 테이블을 시도 할 수 있습니다 :
당신은 글로벌 테이블을 시도 할 수 있습니다 :
create table ##global_var (var1 int ,var2 int) USE "DB_1" GO SELECT * FROM "TABLE" WHERE "COL_!" = (select var1 from ##global_var) AND "COL_2" = @GLOBAL_VAR_2 USE "DB_2" GO SELECT * FROM "TABLE" WHERE "COL_!" = (select var2 from ##global_var)
-
==============================
4.SQL 서버 2016에서 세션 정보를 공유 할 수있는 새로운 방법을 시작하는 SESSION_CONTEXT 및 sp_set_session_context를 통해 소개된다.
SQL 서버 2016에서 세션 정보를 공유 할 수있는 새로운 방법을 시작하는 SESSION_CONTEXT 및 sp_set_session_context를 통해 소개된다.
당신은 128 바이트로 제한 만 이진 값을 지속 CONTEXT_INFO ()의 대안으로 사용할 수 있습니다. 또한, 사용자는 값 언제든지 다시 작성할 수 있으며 보안 검사를 위해 그것을 사용하는 것은 매우 좋지 않다.
다음 문제는 새로운 유틸을 사용하여 해결됩니다. 좀 더 사용자 친화적 인 형식으로 데이터를 저장할 수 있습니다 :
EXEC sp_set_session_context 'language', 'English'; SELECT SESSION_CONTEXT(N'language');
또한, 우리는 읽기 전용으로 표시 할 수 있습니다 :
EXEC sp_set_session_context 'user_id', 4, @read_only = 1;
읽기 전용 세션 컨텍스트를 수정하려고하면이 같은 것을 얻을 것이다 :
-
==============================
5.당신은 변수의 값을 반환 스칼라 반환 함수를 작성하여 유사한 결과를 얻을 수 있습니다. 물론, 당신은 결과의 큰 숫자를 반환하는 쿼리에서 사용할 경우 함수 호출은 비쌀 수 있지만, 결과 집합을 제한하는 경우 당신은 괜찮을 것이다. 여기에 나는이 반 정적 값을 유지하기 위해 방금 만든 데이터베이스를 사용하고 있지만, 너무 당 데이터베이스 기준을 만들 수 있습니다. 당신이 함수에서 그 값을 변경하는 경우, 그것은 바로 그것 (이 호출 다음 번) 사용되는 어디서든 변경됩니다 : 당신이 볼 수 있듯이, 어떤 입력 변수, 반환 정적 값이 것을 그냥 잘이라는 기능이 없습니다.
당신은 변수의 값을 반환 스칼라 반환 함수를 작성하여 유사한 결과를 얻을 수 있습니다. 물론, 당신은 결과의 큰 숫자를 반환하는 쿼리에서 사용할 경우 함수 호출은 비쌀 수 있지만, 결과 집합을 제한하는 경우 당신은 괜찮을 것이다. 여기에 나는이 반 정적 값을 유지하기 위해 방금 만든 데이터베이스를 사용하고 있지만, 너무 당 데이터베이스 기준을 만들 수 있습니다. 당신이 함수에서 그 값을 변경하는 경우, 그것은 바로 그것 (이 호출 다음 번) 사용되는 어디서든 변경됩니다 : 당신이 볼 수 있듯이, 어떤 입력 변수, 반환 정적 값이 것을 그냥 잘이라는 기능이 없습니다.
USE [globalDatabase] GO CREATE FUNCTION dbo.global_GetStandardFonts () RETURNS NVARCHAR(255) AS BEGIN RETURN 'font-family:"Calibri Light","sans-serif";' END GO -- Usage: SELECT '<html><head><style>body{' + globalDatabase.dbo.global_GetStandardFonts() + '}</style></head><body>...' -- Result: <html><head><style>body{font-family:"Calibri Light","sans-serif";}</style></head><body>...
-
==============================
6.사용하려고; 대신 GO의. 그것은 2008 R2 버전 나를 위해 일한
사용하려고; 대신 GO의. 그것은 2008 R2 버전 나를 위해 일한
DECLARE @GLOBAL_VAR_1 INT = Value_1; DECLARE @GLOBAL_VAR_2 INT = Value_2; USE "DB_1"; SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_1 AND "COL_2" = @GLOBAL_VAR_2; USE "DB_2"; SELECT * FROM "TABLE" WHERE "COL_!" = @GLOBAL_VAR_2;
-
==============================
7.특정 예에서 오류가 있기 때문에 사용에 문 후 GO의입니다. 어떤 사용자 변수가 존재하지 않도록 GO 문은 환경을 재설정합니다. 그들은 다시 선언해야합니다. 적어도 SQL Server 버전이 같거나 이전에 2008 년에 나는 새로운 SQL 서버 버전에 대해 동일한 보장 할 수 없습니다에 글로벌 변수의 질문에 대한 대답이 '아니오', 글로벌 변수를 존재하지 않습니다.
특정 예에서 오류가 있기 때문에 사용에 문 후 GO의입니다. 어떤 사용자 변수가 존재하지 않도록 GO 문은 환경을 재설정합니다. 그들은 다시 선언해야합니다. 적어도 SQL Server 버전이 같거나 이전에 2008 년에 나는 새로운 SQL 서버 버전에 대해 동일한 보장 할 수 없습니다에 글로벌 변수의 질문에 대한 대답이 '아니오', 글로벌 변수를 존재하지 않습니다.
문안 인사, Hini
-
==============================
8.나는 각각의 전역 변수에 대한 열이있는 테이블을 사용하는 방식을 좋아한다. 이 방법 당신은 변수의 검색을 코딩에 도움이 자동 완성을 얻을. 여기에 설명 된대로 테이블은 하나의 행으로 제한 할 수 있습니다 : SQL 서버 : 어떻게 하나의 행을 포함하는 테이블을 제한하려면?
나는 각각의 전역 변수에 대한 열이있는 테이블을 사용하는 방식을 좋아한다. 이 방법 당신은 변수의 검색을 코딩에 도움이 자동 완성을 얻을. 여기에 설명 된대로 테이블은 하나의 행으로 제한 할 수 있습니다 : SQL 서버 : 어떻게 하나의 행을 포함하는 테이블을 제한하려면?
-
==============================
9.SQL Server의 전역 변수를 선언 할 수 없습니다. SQL Server는 글로벌 변수의 개념을 가지고 있지만, 그들은 시스템의 정의 및 확장 할 수 없습니다.
SQL Server의 전역 변수를 선언 할 수 없습니다. SQL Server는 글로벌 변수의 개념을 가지고 있지만, 그들은 시스템의 정의 및 확장 할 수 없습니다.
SqlCommand를 예를 들어 같은 변수 교체 메커니즘이 - - 분명히 당신은 당신이 보내는 SQL 트릭의 모든 종류의 작업을 수행 할 수 있습니다 당신이 SQLSERVER로 전송하기 전에,하지만 그것에 대해입니다.
-
==============================
10.
declare @ID_var int set @ID_var = 123456 select * from table where ID_var = @ID_var
또는
declare @ID_var varchar(30) set @ID_var = 123456 select * from table where ID_var = @ID_var
-
==============================
11.내 첫 번째 질문은 (즉 2005, 2008, 2008 R2, 2012)를 사용하는 SQL Server 버전인가?
내 첫 번째 질문은 (즉 2005, 2008, 2008 R2, 2012)를 사용하는 SQL Server 버전인가?
당신은 2008 이상을 사용하는 SQL 변수 결정에 대한 범위를 사용하는 가정. 나는 세계 및 지역 변수의 차이를 정의하는 것 대신에 @variable 이름의 @@ 여기서 variableName을 사용 2005 여전히 한 글로벌 변수를 생각합니다. 2008 년부터 나는이 범위 정의 변수 지정 구조로 변경되었습니다 생각합니다. 예를 글로벌 변수를 만들 위해 @variable는 2008 년 등, 절차, 기능,보기의 시작에서 정의하고 나중에 @@ 나는 믿는다 시스템 기능에 대한 시스템 변수를 정의 할 수 있습니다. 이 버전도 변수가 정의되고 있으며, 당신이지고있는 오류를 설명하면 내가 더 설명 할 수있다.
from https://stackoverflow.com/questions/22372359/how-to-declare-global-variable-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 합니까 포스트 그레스 지원 중첩 또는 자율 거래? (0) | 2020.04.21 |
---|---|
[SQL] 왜 Access에서 LIKE 쿼리는 레코드를 반환하지 않는 이유는 무엇입니까? (0) | 2020.04.21 |
[SQL] 쉼표 데이터베이스 필드에 값을 구분 (0) | 2020.04.21 |
[SQL] PostgreSQL의에서 문자열 값 (같은 평가) 내부 쿼리를 실행할 수있는 방법이 있습니까? (0) | 2020.04.21 |
[SQL] 문자열 열이 절 사이에 SQL (0) | 2020.04.21 |