2013-07-22 11 views
5

ho dichiarato due variabili in SQL primeCome concat stringa in SQL WHERE

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

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

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

mia query SQL è:

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

Qui ho il seguente errore:

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

Qualcuno può aiutarmi con la sintassi corretta su come concatere String in where clausola?

+2

È stato che vi mostra nell'inganno solo perché hai lasciato il simbolo "@" prima che i nomi delle variabili nel seleziona query. – Novice

risposta

9

provare questo -

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 
+0

Ottima risposta! Grazie mille @Devart –

+0

Sei il benvenuto @Saquibul Islam Waheed :) – Devart

+0

Puoi suggerirmi un'altra cosa, che è: questa concatenazione di stringhe è supportata in Jasper (iReport)? @Davart –

1

Passando i nomi delle colonne con valori è soggetto a SQL Injection. Assicurarsi di leggere questo post www.sommarskog.se/dynamic_sql.html

Quindi, vorrei suggerire di modificare il codice come questo

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) 

Basta passare valore nullo se non si vuole applicare una condizione alle colonne BondSales_Confirmed e BondSales_IssueType

+0

Questo in realtà non serve al mio scopo. Grazie comunque @Madhivanan –

4

molto facile !! in uso mysql CONCAT) Funzione (:

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

ma questo non lavoro in mysql:

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

Il 'CONCAT (first_name, '', last_name) = ''' uno funziona anche con JPA TypedQuery. Grazie per l'aiuto. – alsobubbly