9

我在 RAW sql 中声明了两个变量

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 子句中连接字符串的正确语法吗?

4

3 回答 3

13

好简单!!在 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';
于 2013-11-08T21:29:59.793 回答
11

试试这个——

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
于 2013-07-22T07:12:18.383 回答
2

将列名与值一起传递会受到 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 应用条件,只需传递空值

于 2013-07-22T07:34:50.213 回答