ref*_*med 1 sql sql-server casting type-conversion
有没有办法在SQL Server中执行以下操作:
DECLARE @list nvarchar(MAX) = '1, 2, 3, 4, 5, 6';
SELECT * FROM table WHERE ID IN ( @list );
-- Column ID is type bigint
Run Code Online (Sandbox Code Playgroud)
错误:
将数据类型nvarchar转换为bigint时出错.
您不希望将其转换为int.相反,like用于比较:
select *
from table
where ', '+@list+', ' like ', '+cast(id as varchar(255)) + ', ';
Run Code Online (Sandbox Code Playgroud)
这有缺点,查询将不使用索引.如果这很重要,那么您可以使用动态SQL:
DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
declare @sql nvarchar(max) = 'SELECT * FROM table WHERE ID IN ('+ @list +')';
exec sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)
用Dynamic SQL.
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
SET @SQLQuery = 'SELECT * FROM table WHERE ID IN (' + @list + ')'
EXECUTE(@SQLQuery)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4781 次 |
| 最近记录: |