2013-07-22 14 views
5

ich zwei Variablen in RAW SQL deklariert habenWie String in SQL Concat WHERE-Klausel

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

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

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

My SQL-Abfrage ist:

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

Hier bekomme ich folgende Fehlermeldung:

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

Kann mir jemand helfen Bitte helfen Sie mir mit der richtigen Syntax darüber, wie String in Where-Klausel concat wird?

+2

Es wurde nur zeigen Sie Fehler, weil Sie nach links Symbol "@" vor Ihrer Variablennamen in der Abfrage auswählen – Novice

Antwort

9

Versuchen Sie dieses -

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

Große Antwort! Vielen Dank @Devart –

+0

Gern geschehen @Saquibul Islam Waheed :) – Devart

+0

Können Sie mir noch eine letzte Sache vorschlagen, die ist: Wird diese String-Verkettung in Jasper (iReport) unterstützt? @Devart –

1

Passing Spaltennamen zusammen mit Werten unterliegt SQL Injection. Achten Sie darauf, diesen Beitrag zu lesen www.sommarskog.se/dynamic_sql.html

So würde ich Ihnen vorschlagen, den Code wie dieser

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) 

einfach passieren Nullwert zu ändern, wenn Sie nicht wollen, um einen Zustand gelten zu den Spalten BondSales_Confirmed und BondSales_IssueType

+0

Dies dient eigentlich nicht meinem Zweck. Danke trotzdem @Madhivanan –

4

sehr einfach !! in MySQL CONCAT() Funktion:

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

aber dies tut nicht Arbeit in mysql:

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

Die 'CONCAT (first_name, '', last_name) = ''' funktioniert auch mit JPA TypeQuery. Danke für Ihre Hilfe. – alsobubbly