如何将int参数传递给OpenQuery SQL

时间:2019-01-25 10:36:13

标签: sql-server

我有这个查询,但是它给了我一个将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;

3 个答案:

答案 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;