2013-07-22 54 views
5

我已经宣布在原始的SQL两个变量CONCAT字符串如何在SQL WHERE子句

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

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

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

我的SQL查询:

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

在这里,我得到以下错误:

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

可以任何人请帮助我有关如何concat字符串在where子句正确的语法?

+2

它显示你错误只是因为你之前在你的变量名左“@”符号选择查询。 – Novice

回答

9

尝试这一个 -

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

好答案!非常感谢@Devart –

+0

不客气@Saquibul伊斯兰教Waheed :) – Devart

+0

你能否给我建议我最后一件事,即:Jasper(iReport)支持这种字符串连接? @Devart –

1

传递列名与值一起受到SQL注入。请务必阅读这篇文章www.sommarskog.se/dynamic_sql.html

所以我建议你改变这样

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) 

代码只是通过空值,如果你不想申请条件到列BondSales_Confirmed和BondSales_IssueType

+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