我正在使用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;
这会为表格中的行子集的文本字段附加一个后缀。
有什么想法吗?
答案 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;
此建议的原因是Name
是reserved word。让保留词令人沮丧的一件事是你不知道什么时候会咬你。保留字可能不会在一个上下文中引起问题,但会导致同一SQL语句在另一个上下文中失败。将名称括在方括号中或使用别名(或表名)限定名称可以避免混淆Access的db引擎。
试试UPDATE
。
UPDATE Customers
SET [Name] = [Name] & 'SUFFIX'
WHERE CustomerType = 1;