2013-07-22 164 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