字符串连接在SELECT语句中无法正常工作

时间:2013-08-09 14:17:37

标签: sql sql-server ms-access

我正在使用MS Access通过Windows 7上的ODBC连接使用SQL Server数据库。

最终目标是将字符串文字附加到行的子集的其中一个字段。不过,最初,我只是想做一个SELECT,所以我可以确保一切都正确。我在尝试将字符串文字附加到字段时遇到了麻烦。

以下简单的SQL效果很好。

SELECT Name FROM Customers WHERE CustomerType = 1;

下一步是尝试稍微修改显示的名称。

SELECT Name, 'PREFIX' & Name FROM Customers WHERE CustomerType = 1;

以上也奏效了。然后我尝试了以下内容。

SELECT Name, Name & 'SUFFIX' FROM Customers WHERE CustomerType = 1;

这不起作用。输出仅显示名称字段,不附加任何内容。我环顾四周,发现SQL Server似乎支持CONCATENATE('a'+'b')。我尝试在查询中使用它,但它失败了,因为没有CONCATENATE函数的Access出错。

我也尝试用双引号代替+而不是&。

奇怪的是,前缀案例有效,后缀案例没有。

最终的目标是构建类似下面的内容。

UPDATE Customers SET Name = Name & 'SUFFIX' WHERE CustomerType = 1;

这会为表格中的行子集的文本字段附加一个后缀。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

在SQL Server中,&用于二进制掩码。您需要+运算符

UPDATE Customers 
SET Name = Name + 'SUFFIX' 
WHERE CustomerType = 1;

我不知道你从哪里得到CONCATENATE - SQL 2012中有一个CONCAT函数,但在任何其他版本中都没有这个函数

答案 1 :(得分:2)

我的印象是您有一个带Customers的Access查询作为SQL Server表的ODBC链接。如果这是正确的,这两个查询版本中的任何一个都应该有效。

SELECT
    [Name],
    [Name] & 'SUFFIX'
FROM Customers
WHERE CustomerType = 1;

SELECT
    c.Name,
    c.Name & 'SUFFIX'
FROM Customers AS c
WHERE c.CustomerType = 1;

此建议的原因是Namereserved word。让保留词令人沮丧的一件事是你不知道什么时候会咬你。保留字可能不会在一个上下文中引起问题,但会导致同一SQL语句在另一个上下文中失败。将名称括在方括号中或使用别名(或表名)限定名称可以避免混淆Access的db引擎。

试试UPDATE

UPDATE Customers
SET [Name] = [Name] & 'SUFFIX'
WHERE CustomerType = 1;