2013-07-22 5 views
5

내가 RAW SQL에 두 개의 변수를 선언 한 SQL에서 문자열을 CONCAT하는 방법 내 SQL 쿼리

DECLARE @str nvarchar(max), @str1 nvarchar (max); 

SET @str = " AND (c.BondSales_Confirmed <> -1)"; 

SET @str1 = " AND (c.BondSales_IssueType = 'REGULAR')"; 

입니다

: 여기

SELECT * From t_BondSales Where (BondSales_cType <> 'Institute') " + str1 + str " 

나는 다음과 같은 오류 얻을 :

Error: SQL Problems: Incorrect Syntax near "+ str1 + str"

어느 곳이라도 where 문에서 concat 문자열을 처리하는 방법에 대한 올바른 구문을 사용할 수 있습니까?

DECLARE 
     @str NVARCHAR(MAX) 
    , @str1 NVARCHAR (MAX); 

SELECT 
     @str = ' AND c.BondSales_Confirmed != -1' 
    , @str1 = ' AND c.BondSales_IssueType = ''REGULAR'''; 

DECLARE @SQL NVARCHAR(MAX) 

SELECT @SQL = ' 
SELECT * 
FROM t_BondSales 
WHERE BondSales_cType != ''Institute''' 
    + @str 
    + @str1 

PRINT @SQL 
EXEC sys.sp_executesql @SQL 
+2

그것은 당신이 당신의 변수 이름 앞에 '@'기호를 왼쪽 때문에 그냥 오류 보여주는데 검색어를 선택하십시오. – Novice

답변

9

이 하나 봅니다. 당신이 조건을 적용하지 않으려면 그냥 널 (null) 값을 전달이

declare @BondSales_Confirmed int 
declare @BondSales_IssueType varchar(100) 

SELECT * From t_BondSales Where (BondSales_cType <> 'Institute') 
AND (c.BondSales_Confirmed <> @BondSales_Confirmed or @BondSales_Confirmed is null) 
AND (c.BondSales_IssueType = @BondSales_IssueType or @BondSales_IssueType is null) 

같이 코드를 변경 그래서 내가 당신을 제안

www.sommarskog.se/dynamic_sql.html이 게시물을 읽을 수 있는지 확인 BondSales_Confirmed 및 BondSales_IssueType 열에

+0

대단한 답변입니다! 고마워요. @Devart –

+0

환영합니다. @Saquibul Islam Waheed :) – Devart

+0

또 다른 마지막 물건을 제안 해 주시겠습니까?이 문자열 연결이 Jasper (iReport)에서 지원됩니까? @Devart –

1

값과 함께 열 이름을 전달 SQL 주입이 적용됩니다 -

+0

이것은 실제로 내 목적에 부합하지 않습니다. 고마워요 @Madhivanan –

4

매우 편리 !! MySQL을 사용 CONCAT() 함수 :

SELECT * FROM tbl_person WHERE CONCAT(first_name,' ',last_name) = 'Walter White'; 

그러나이 수행 MySQL의에서 하지 일 :

SELECT * FROM tbl_person WHERE first_name+' '+last_name = 'Walter White'; 
+0

'CONCAT (first_name, '', last_name) = '''도 JPA TypedQuery와 함께 작동합니다. 도와 줘서 고마워. – alsobubbly