2011-11-09 2 views
0

여기 내 단편 인 방법다른 변수로 저장 실행 가변 출력 SQL

create procedure sp (@pre nvarchar(50), @count nvarchar(50)) 
as 
declare @preval nvarchar(500); 
declare @countval nvarchar(500); 

select @preval = 'select '+ @prefix + ' from tblc' 
select @countval= 'select '+ @counter + ' from tblc' 

exec sp_executesql @preval,@countval 

프리 카운트를 갖는 2 개 입력 파라미터 "columnsname1"와 동적 "columnname2"를 제공한다. 나는 특정 열 내에서 값을 제공하는 쿼리/sp를 만들고 싶습니다. 그리고이를 내 sp 내에서 2 개의 다른 변수 또는 단일 변수에 저장하려고합니다. 이제는 필자가 원하지 않는 결과로 컬럼 이름을 얻고있다. 특정 컬럼 내부의 값을 원한다. 또한 3 번째 변수에서 그 값을 원한다. 의심의 여지가 있으면 알려주세요.

+2

이 절차는 작동하지 않습니다 : 매개 변수'@ pre' 및'@ count'가 있지만 프로 시저에서'@ prefix' 및'@ counter'라는 이름을 사용하십시오. 이 문제를 해결하면 적어도 저에게는 그렇게됩니다. 아, 그리고 어떤 RDBMS를 사용합니까? SQL Server? –

+2

이것은 SQL이 작동하도록 설계된 방법이 아닙니다. 영리하고 일반적인 코드를 작성하려고하지 마십시오. 당신은 또한 카운터에 레코드 세트의 출력을 저장할 수 없다 – gbn

답변

2

음 ... 귀하의 예제가 의사 코드이며 그대로 작동하지 않는다고 가정하면 sp_executesql의 작동 방식을 읽을 수 있습니다. 두 번째 매개 변수는 이 아니며 후속 명령은입니다. 내가 이유에 의문을 제기 것, 개인적으로 ...

create procedure sp (@prefix nvarchar(50), @counter nvarchar(50)) 
as 
declare @preval nvarchar(500); 
declare @countval nvarchar(500); 
select @preval = 'select '+ @prefix + ' from tblc' 
select @countval= 'select '+ @counter + ' from tblc' 

declare @cmd as nvarchar(500); 
set @cmd = @preval+';'[email protected] 
exec sp_executesql @cmd 

... 그리고이 작업을 수행하지 않는 사람을기도

sp '1; delete','' 

을 :

는 다음과 같은 시도 할 수 있다고 할 데 당신은이 길로 내려갈 필요성을 느낍니다.

그러나 sp_executesql을 읽고 다음 예를 보면 필요한 것을 얻을 수있는 방법을 찾을 수 있습니다. 나는 'tblc'테이블에 단 하나의 행만 있다고 추측하고 있습니까?

declare @sql as nvarchar(4000) 
declare @p1 as integer 

set @sql = 'select @p1=count(*) from tblc' 
exec sp_executesql @sql, N'@p1 int output', @p1 output 

select @p1 
+1

SQL 인젝션 및 질문에 대한 경고 **에 ** 한 사람은 이것을 원할 것입니다. –