Possible Duplicate:
using dynamic IN clause in MSSQL
我有一个 SQL 语句,其中包含诸如 @StartRow, @StartEnd, @CategoryIds
之类的参数.
SELECT * FROM StackOverFlow
WHERE
StartRow = @StartRow
AND StartEnd = @StartEnd
AND CategoryId IN (@CategoryIds)
当我设置如下参数时:
DECLARE @StartRow INT = 1;
DECLARE @StartRow INT = 10;
DECLARE @CategoryId NVARCHAR(50);
set @CategoryId ='124,125'
失败的消息是:
Conversion failed when converting the nvarchar value '124,125' to data type int.
当我手动设置 SQL where 语句时,如下所示:
WHERE
StartRow = @StartRow
AND StartEnd = @StartEnd
AND CategoryId IN (124, 125)
它有效。
如何解决转换问题?
最佳答案
您需要使用dynamic SQL为了这。所以你会写
DECLARE @StartRow INT = 1;
DECLARE @StartRow INT = 10;
DECLARE @CatogoryIds NVARCHAR(50);
SET @CatogoryIds = N'124, 125';
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'
SELECT *
FROM StackOverFlow
WHERE
StartRow = ' + @StartRow +
N' AND StartEnd = ' + @StartEnd +
N' AND CategoryId IN (' + @CategoryIds + N');';
EXEC(@SQL);
GO
我希望这会有所帮助。
关于sql - SQL Server 转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706535/