如何在 SQL 查询语句中使用文字反斜杠?

How to use literal backslash in SQL query statement?

EDIT2:对不起大家,问题已解决。我正在尝试将一个数字与我的字符串连接起来。我忘记了我在此处发布时简化了我的陈述,认为我的问题与反斜杠有关,而不是类型兼容性。你们是对的,我是个白痴。谢谢!

我正在使用 Access 2013,我的查询从 SQL 10.0 服务器(使用直通)提取数据。

我正尝试在我的 SQL 查询中使用反斜杠,如下所示(***edit:tbltask.jobnum 是我数据库中的一个字符串):

SELECT [tblEstimator].[Name] + '\20' + [tbltask].[JobNum] + ' JOBS\' AS JobMidFilePath

但是当我 运行 查询时,我得到错误:

Conversion failed when converting the varchar value '\20' to data type smallint. (#245)

我不知道这意味着什么,也不知道它为什么要尝试将任何内容转换为 smallint。

首先,您可以尝试 cast/convert 您的 int,因为您的输出应该是字符串。如果单引号不起作用,您可以尝试使用双引号 (")

SELECT [tblEstimator].[Name] + "\20" + CAST([tbltask].[JobNum] as varchar(100)) + " JOBS\" AS JobMidFilePath

要重现您的问题,我们可以编写如下查询:

declare @name varchar(50) = 'Test',
        @JobNum smallint = 12

select @name + '\20' + @JobNum + ' JOBS\'; 

这将 return 同样的错误:

Conversion failed when converting the varchar value 'Test' to data type smallint.

但是如果您将 smallint 或数字字段转换为这样的字符串,错误应该会消失:

declare @name varchar(50) = 'Test',
        @JobNum smallint = 12

select @name + '\20' + cast(@JobNum as varchar(10)) + ' JOBS\'

您的查询应如下所示:

SELECT [tblEstimator].[Name] + '\20' + cast([tbltask].[JobNum] as varchar(10)) 
       + ' JOBS\' AS JobMidFilePath

我不确定在这方面 MS-ACESS 是否等效,但这应该可以解决您的问题。

/*You can copy/paste directly into SQL, comments will be commented out ini SQL syntax
I would create a temp table to achieve this. */

USE whateverDB
GO

CREATE TABLE #toSelectFrom (
    Name VARCHAR (100) 
    ,JobNum TINYINT
    /*look at the schema, it'll tell you what the data type is in SQL tables, in the column folder [see image] (http://i.ytimg.com/vi/MKPtdjq3MzA/maxresdefault.jpg) - copy verbatim to your temp table columns */
    ,slashPathNumber VARCHAR (25)
    ,slashPathJobs VARCHAR (50)
)

INSERT INTO #toSelectFrom (Name, slashPathNumber, JobNum, slashPathJobs)
SELECT [tblEstimator].[Name], '\\20', [tbltask].[JobNum], ' JOBS\' AS JobMidFilePath /*** FROM yourTableToSelectFrom -- you NEED THIS FOR VALID SQL! ***/ 

--Then just: 
SELECT * FROM #toSelectFrom;
-- OR Alternatively:
SELECT Name + slashPathNumber + JobNum + slashPathJobs AS JobMidFilePath FROM #toSelectFrom;

/*
If you use it a lot, just write the above select statement(s) into a view to select from more often. ;)
*/