web-dev-qa-db-ja.com

SQLWHERE句で文字列を連結する方法

RAWSQLで2つの変数を宣言しました

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  "

ここで、次のエラーが発生します。

エラー:SQLの問題:「+ str1 + str」の近くの構文が正しくありません

誰かがwhere句で文字列を連結する方法についての適切な構文を手伝ってくれませんか?

これを試してください-

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
10
Devart

非常に簡単!! mysqlでCONCAT()関数を使用します。

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

しかし、これはnot mysqlで機能します:

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

値とともに列名を渡すことは、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列に条件を適用しない場合は、null値を渡すだけです。

1
Madhivanan