2017-10-26 13 views
0

변수를 선언하고 스크립트 정의로 설정 한 다음 스크립트에서 반복적으로 실행할 수 있습니까? 변수 결과를 스크립트 결과로 설정하는 방법을 알고 있지만 정의 자체를 다시 사용하고자합니다. 이는 가끔씩 스크립트에서 카운트를 얻고 다른 스크립트에서 상위 결과를 얻고 싶기 때문에 스크립트를 처음부터 한 번만 변경하면되므로 스크립트를 쉽게 사용자 정의 할 수 있기를 원하기 때문입니다.변수의 스크립트 사용

예 :

declare @RepeatScript nvarchar(200) 

declare @count int 

declare @topresult int 

set @RepeatScript = ' from Table1 where something = 1 and something else > getdate()-5' 

set @count = select count(ID) & @RepeatScript 

set @topresult = select top 1 (ID) & @RepeatScript 

이 매우 간단한 경우가 고칠 간단 할 것이나, 나는 이상과 이상 temp_table을 만들고 드롭 할 필요없이 정보를 여러 번 동일한 세트를 참조하기를 원한다면 , 이것은 매우 도움이 될 것입니다. 나는 MS Access에서 항상 이런 종류의 일을하고 있지만 SSMS에서 어떻게하는지 알아낼 수 없다.

+0

간단히 말하면, 이것을 할 수 없습니다. 그러나 동일한 쿼리의 결과에 두 번 이상 액세스하려는 경우 동일한 쿼리를 반복해서 수행하는 대신 변수에 결과를 저장해야합니다. 당신이 동적 SQL을 요구하는 것처럼 보이는 것을 달성하기 위해서. –

답변

0
declare @RepeatScript nvarchar(200) 

declare @count varchar(200) 

declare @topresult varchar(200) 

set @RepeatScript = ' from Table1 where something = 1 and something else > getdate()-5' 

set @count = 'select count(ID) '[email protected]+'' 

set @topresult = 'select top 1 (ID)'[email protected]+'' 

print (@count) 
print (@topresult) 

그런가요? 대신 print를 사용하면 select 문을 실행하기 위해 exec를 사용하게됩니다. 그게 도움이 되니?

+0

이것은 실행하면 원하는 정보를 얻지 만, 스크립트에서 참조하고 싶으면 작동하지 않습니다. "Select * from table2 where ID = @topresult"를 사용하려면 작동하지 않는 것 같습니다. 일반적인 개념은 select 문을 다른 문에 반복적으로 중첩시킬 수 있다는 것입니다. –

0

이러한 쿼리를 반복적으로 실행할 필요가 없습니다. 이 정보를 캡처하기 위해 두 개 이상의 쿼리를 실행할 필요조차 없습니다. 이렇게하면 단일 쿼리에서 두 데이터가 모두 캡처됩니다. 그런 다음 현재 배치 내의 다른 위치에서 해당 정보를 참조 할 수 있습니다. 이것은 초기에 스크립트를 단순히 변경하는 기준을 충족시킵니다.

declare @count int 
    , @topresult int 

select @count = count(ID) 
    , @topresult = MAX(ID) --MAX would the same thing as top 1 order by ID desc 
from Table1 
where something = 1 
+0

나는이 방법으로이 코드를 쓸 수 있는지 몰랐고이 방법으로 변수를 참조하면 삶이 편 해졌다. 내 상황에서 나는 여전히 반복해야만한다. 왜냐하면 나는 update 문을 실행하기 전에 topresult를 원하기 때문이다. 그리고 카운트는 업데이트 이후이다 (이것은 문에 영향을 미친다). 이 스크립트는 대다수의 스크립트에서 매우 유용합니다. –