EDIT2:对不起大家,问题解决了。我想尝试将数字与我的字符串连接起来。我忘了我在发布这里时简化了我的陈述,认为我的问题与反斜杠有关,而不是类型兼容性。你们是对的,我是个白痴。谢谢!
我正在使用Access 2013
我的查询从SQL 10.0服务器中提取数据(使用传递)。
我试图在我的SQL查询中使用反斜杠,如下所示(***编辑:tbltask.jobnum是我数据库中的一个字符串):
SELECT [tblEstimator].[Name] + '\\20' + [tbltask].[JobNum] + ' JOBS\\' AS JobMidFilePath
但是当我运行查询时,我收到错误:
将varchar值'\\ 20'转换为数据类型smallint时转换失败。 (#245)
我不知道这意味着什么或为什么它试图将任何东西转换为smallint。
答案 0 :(得分:2)
要复制您的问题,我们可以编写如下的查询:
declare @name varchar(50) = 'Test',
@JobNum smallint = 12
select @name + '\\20' + @JobNum + ' JOBS\\';
这将返回相同的错误:
将varchar值'Test \ 20'转换为数据时转换失败 输入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
,但这可以解决您的问题。
答案 1 :(得分:1)
首先,你可以尝试转换/转换你的int,因为你的输出应该是字符串。如果单引号不起作用,您可以尝试使用double qoute(“)
SELECT [tblEstimator].[Name] + "\\20" + CAST([tbltask].[JobNum] as varchar(100)) + " JOBS\\" AS JobMidFilePath
答案 2 :(得分:1)
/*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. ;)
*/