sql - SQL Server 转换失败

标签 sql sql-server-2008

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/

相关文章:

mysql - 我没有在 mysql 查询中获得正确的数据。任何人都可以帮助我吗?

sql - 计算一组给定的项目(重量)所需的盒子数量

sql-server-2008 - SQL Server 2008 R2 If/else 语法

sql - 查找和删除重复索引?

sql - 能够对两个 VarChar 参数执行 LIKE

mysql - 如何保证嵌套选择查询的效率?

mysql - 在sql中查找具有最大连接数的2个人

php - 重置MySQL表所有行中某个字段的内容

sql - 如何使用变量作为表名?

sql - T/SQL - 字符串操作