2016-10-20 2 views
0

이미 솔루션을 검색했지만 답변이 내 문제를 해결하기에 충분하지 않았습니다.IF 문에있는 SELECT 문에서 테이블에 변수 사용

그래서 나는이 문이 :

IF NOT EXISTS 
(SELECT InternalRepositoryId FROM Tfs_GitInterface.dbo.tbl_GitRepository WHERE Name = @repositoryName) 
BEGIN 
    ... 
END 

또는 가능한도 물론

:

IF NOT EXISTS 
(SELECT InternalRepositoryId FROM dbo.tbl_GitRepository WHERE Name = @repositoryName) 
BEGIN 
    ... 
END 

그것의 완전 잘 작동. 나는 dbo가 다른 데이터베이스에 대한 스키마라는 것을 언급하고자한다. 지금은이 같은 것을 만들고 싶어 :

DECLARE @schema [nvarchar](400); 
SET @schema = 'dbo'; 

IF NOT EXISTS 
(SELECT InternalRepositoryId FROM @schema.tbl_GitRepository WHERE Name = @repositoryName) 
BEGIN 
    ... 
END 

또는

DECLARE @schemaTable [nvarchar](400); 
SET @schemaTable = 'dbo.tbl_GitRepository'; 

IF NOT EXISTS 
(SELECT InternalRepositoryId FROM @schemaTable WHERE Name = @repositoryName) 
BEGIN 
    ... 
END 

가 지금은 이미 일부 동적 SQL을 시도를하지만 오류없이 작동하지 않을 것입니다 :

DECLARE @schemaTable [nvarchar](400); 
SET @schemaTable = 'dbo.tbl_GitRepository'; 
DECLARE @sql [nvarchar](4000); 
SET @sql = 'SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ' + @repositoryName; 

IF NOT EXISTS 
(EXECUTE sp_executesql @sql) 
BEGIN 
    ... 
END 

그럼 난 얻을 EXECUTE의 오류 : 'EXECUTE'근처의 잘못된 구문. '('또는 SELECT) 및 몇 가지 사소한 오류가 예상 됨

누구든지이 일을하는 방법을 알았습니까?

편집 : IF 문은 큰 문제

그렇지는 동적 SQL에있는 경우 전체를 넣어해야합니다
+0

가능한 중복 http://stackoverflow.com/questions/27710260/sql- if-exists-dynamic-query) – Tanner

+0

링크 된 질문은 내가 한 일을하는 것처럼 보입니다. – Tanner

+0

나는 이미 이와 같은 것을 시도했지만 효과가 없었습니다./ –

답변

1

했다. 1 선택은

DECLARE @schemaTable [nvarchar](400); 
SET @schemaTable = 'dbo.tbl_GitRepository'; 
DECLARE @sql [nvarchar](4000); 
SET @sql = 'IF NOT EXISTS (SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ''' + @repositoryName + ''')' + CHAR(10) + 
'BEGIN SELECT 1' + CHAR(10) + ' END'; 

EXECUTE sp_executesql @sql 

당신이 실제 문을 어디다

[SQL "경우가 존재 ..."동적 쿼리 (의
+0

필자가 링크 한 복제본에서 제안한대로'@@ ROWCOUNT'를 사용하면 더 좋은 해결책이 될 것입니다. – Tanner

+0

나에게 이것은 더 멋져 보인다. 나는 그것을 시도한다. 하지만 CHAR (10)이 필요한 이유는 무엇입니까? –

+0

Nvm CHAR (10)을 (를) 찾았습니다. –