1

我正在使用 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;

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

我还尝试了双引号和 + 而不是 &。

前缀大小写起作用而后缀大小写不起作用似乎很奇怪。

同样,最终的目标是构建类似下面的东西。

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

这会将后缀附加到表中行子集的文本字段。

有任何想法吗?

4

2 回答 2

4

在 SQL Server 中,&用于二进制掩码。你想要+运营商

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

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

于 2013-08-09T14:20:45.560 回答
2

我的印象是您有一个 Access 查询,其中Customers包含指向 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;

这个建议的原因是那Name是一个保留字。让保留字感到沮丧的一件事是你不知道它们什么时候会咬你。保留字可能不会在一个上下文中引起问题,但会导致相同的 SQL 语句在另一个上下文中失败。将名称括在方括号中或使用别名(或表名)限定名称可避免混淆 Access 的数据库引擎。

试试这个UPDATE

UPDATE Customers
SET [Name] = [Name] & 'SUFFIX'
WHERE CustomerType = 1;
于 2013-08-09T15:18:26.860 回答