CREATE PROCEDURE ProcedureName1
@columnsname varchar(50),
@columnsvalue varchar(50)
AS
BEGIN
with cet as
(
Select ID,
names,
Null As address,
work,
note
From Tabl1
Where @columnsname Like @columnsvalue
Union All
Select t2.ID,
t2.name,
t2.address,
Null,
Null As tt
From Tabl2 As t2
Left Join Tabl1 As t1
On t2.ID = t1.ID
Where @columnsname Like @columnsvalue
)
Select *
From cet
Order By id,
note Desc,
cet.address
END GO
0
A
답변
0
이와 같이하려면 동적 SQL을 사용해야합니다. @columnsname
의 값을 sys.columns
또는 information_schema.columns
과 마찬가지로 허용하는 것이 좋습니다.
sp_executesql
을 사용하여 매개 변수로 @columnsvalue
을 계속 유지하고 실행중인 SQL에 연결하지 마십시오.
create procedure ProcedureName1 (
@columnsname sysname --varchar(50)
, @columnsvalue varchar(50)
) as
begin
declare @sql nvarchar(max), @column_name sysname;
/* make sure the @columnsname is a valid column name */
set @column_name = (
select c.name
from sys.columns c
where c.object_id = object_id(N'Tabl1')
and c.name = @columnsname
);
set @sql = 'with cte as (
select
ID
, names
, null as address
, work
, note
from Tabl1
where '[email protected]_name+' like @columnsvalue
union all
select
t2.ID
, t2.name
, t2.address
, null
, null as tt
from Tabl2 as t2
left join Tabl1 as t1 on t2.ID = t1.ID
where '[email protected]_name+' like @columnsvalue
)
select *
from cet
order by
id
, note desc
, address;'
exec sp_executesql @sql, N'@columnsvalue varchar(50)', @columnsvalue
end;
go
참조 :
+0
대단히 감사합니다 SqlZim –
+0
@SrajMuneer 도와 드리겠습니다! 참조 자료를 읽고 동적 SQL에주의하십시오. – SqlZim
관련 문제
- 1. 페이지로드시 저장 프로 시저의 매개 변수를 전달하는 방법
- 2. 저장 프로 시저의 매개 변수를 선택한 목록에 전달하는 방법은 무엇입니까?
- 3. 다른 프로 시저에서 저장 프로 시저의 매개 변수를 사용하는 방법
- 4. MySQL은 저장 프로 시저의 매개 변수를 자릅니다?
- 5. 저장 프로 시저에 매개 변수를 전달하는 방법
- 6. 저장 프로 시저에 매개 변수를 전달하는 방법
- 7. 저장 프로 시저의 변수를 열 유형으로 설정할 수 있습니까?
- 8. where 절을 저장 프로 시저의 매개 변수로 전달하는 방법
- 9. 동적 SQL에서 저장 프로 시저의 입력 매개 변수를 사용하는 방법
- 10. 저장 프로 시저의 본문에 변수를 전달하는 방법은 무엇입니까?
- 11. 출력 매개 변수를 사용하지 않고 저장 프로 시저의 결과 저장
- 12. User와 LogIn을 저장 프로 시저의 매개 변수로 전달하는 방법은 무엇입니까?
- 13. 저장 프로 시저의 매개 변수 SSRS 내부
- 14. 저장 프로 시저의 출력 매개 변수
- 15. 저장 프로 시저의 매개 변수에서 테이블 이름
- 16. 동적 프로 시저의 매개 변수 수를 저장 프로 시저에 전달하십시오.
- 17. MySQL 저장 프로 시저의 매개 변수
- 18. 저장 프로 시저의 매개 변수 비교
- 19. 와이드 카드 저장 프로 시저의 매개 변수로
- 20. 저장 프로 시저의 출력 매개 변수가 null입니다.
- 21. 저장 프로 시저의 기본값 관리 '매개 변수
- 22. SQL 저장 프로 시저의 선택적 매개 변수
- 23. 저장 프로 시저의 오류
- 24. 저장 프로 시저의 매개 변수를 SSIS로 전달하는 방법 우수 제한 조건
- 25. 코드에서 SQL Server로 저장 프로 시저의 많은 수의 매개 변수를 전달하는 방법
- 26. 저장 프로 시저의 선택적 매개 변수
- 27. 저장 프로 시저의 테이블 매개 변수에서 다른 저장 프로 시저로 값을 전달하는 방법은 무엇입니까?
- 28. 저장 프로 시저의 Datepart
- 29. 저장 프로 시저의 매개 변수를 사용하여 행 셀 가져 오기
- 30. 저장 프로 시저의 null 매개 변수를 기반으로하는 문을 무시합니다.
나는 * 당신이 실제로 그런 당신의 프로 시저를 작성하지 않았 으면 정말 *. 읽을 수없는 혼란입니다. 그 메모에, 당신은 질문을 잊어 버렸습니다. – Siyual
임의의 열을 값과 비교하여 무작위로 검사하려고한다고 가정 할 때 동적 SQL 없이는이 작업을 수행 할 수 없습니다. 그리고 동적 SQL을 사용하는 것은 SQL 인젝션을 많이하는 경향이 있습니다. –
1) 열과 테이블 이름은 "sysname"유형입니다. 2) 열 이름이나 테이블 이름이 필요한 곳에 변수를 전달할 수 없습니다. 3) 이와 같은 것을 정말로 필요로한다면 동적 SQL이 유일한 방법입니다. 4) 아마도 이런 식으로 시도해서는 안됩니다 ... 뒤로 물러서서 요구 사항을 다시 검토하십시오. 이것은 좋은 생각이 아닙니다. 나쁜 성능, 심각하게 보안 취약성. – pmbAustin