我有这个查询,但是它给了我一个将varchar转换为int的例外。是否可以使用int而不是将其声明为varchar(max)?
DECLARE @Filtro int, @SQL NVARCHAR(MAX);
SET @Filtro = 1;
SET @SQL ='SELECT *
FROM OpenQuery(MACPAC, ''SELECT FET001.ET0109, count(FET001.ET0101)
FROM AUTO.D805DATPOR.FET001 FET001
WHERE (FET001.ET0104=''''POE'''') AND (FET001.ET0105=''''DIS'''')
GROUP BY FET001.ET0109
HAVING COUNT (FET001.ET0101) > ''''' + @Filtro + ''''''')';
EXEC sp_executesql @SQL;
答案 0 :(得分:1)
您正在将字符串文字与Player Settings
连接在一起,因此会出现错误。首先将INT
转换为INT
。您可以将变量保留为NVARCHAR
。
INT
答案 1 :(得分:1)
无论何时要在动态查询中使用@Filtro
变量,都应将其强制转换为nvarchar
,如下所示:CAST(@Filtro as nvarchar(N))
答案 2 :(得分:1)
只需在附加之前将INT值转换为Varchar
DECLARE @Filtro int, @SQL NVARCHAR(MAX);
SET @Filtro = 1;
SET @SQL ='SELECT *
FROM OpenQuery(MACPAC, ''SELECT FET001.ET0109, count(FET001.ET0101)
FROM AUTO.D805DATPOR.FET001 FET001
WHERE (FET001.ET0104=''''POE'''') AND (FET001.ET0105=''''DIS'''')
GROUP BY FET001.ET0109
HAVING COUNT (FET001.ET0101) > ''''' + RTRIM(LTRIM(CAST(@Filtro AS VARCHAR(20)))) + ''''''')';
EXEC sp_executesql @SQL;