Sql server SQL Server中的IN语句

Sql server SQL Server中的IN语句,sql-server,sql-server-2008,Sql Server,Sql Server 2008,问题1: DECLARE @strSQL NVARCHAR(MAX) = '' DECLARE @MultiIDs NVARCHAR(50) = '7,8' SET @strSQL = 'SELECT TOP 1 [User].PracticeID FROM [User] WHERE [UserId] IN (' + @MultiIDs + ')' EXEC(@strSQL) 问题2: DECLARE @MultiIDs NVARCHAR(550) = '7,8' SELECT TOP

问题1:

DECLARE @strSQL NVARCHAR(MAX) = ''
DECLARE @MultiIDs NVARCHAR(50) = '7,8'
SET @strSQL = 'SELECT TOP 1 [User].PracticeID FROM [User] WHERE [UserId] IN (' + @MultiIDs + ')'    
EXEC(@strSQL)
问题2:

DECLARE @MultiIDs NVARCHAR(550) = '7,8'
SELECT TOP 1 [User].PracticeID FROM [User] WHERE [UserId] IN (@MultiIDs)    
为什么Query1会起作用而不是Query2


任何解释都将不胜感激。谢谢,因为查询2将导致

WHERE [UserId] IN ('7,8') 
它是一个字符串(包含2个值),而不是单独的

查询1完全是一个字符串,将被转换为

WHERE [UserId] IN (7,8) 

(注意引号)

,因为查询2的结果是

WHERE [UserId] IN ('7,8') 
它是一个字符串(包含2个值),而不是单独的

查询1完全是一个字符串,将被转换为

WHERE [UserId] IN (7,8) 

(注意引号)

在查询1中哪一个应该是相同的情况?否?否,查询1本身是一个字符串,将被转换为查询。因此,根据您的回答,如果我将“替换为空”,它应该在第二个查询中起作用,对吗?您不能这样做。要么在其中放置单独的值,要么像在查询1中那样使用动态查询,这在查询1中应该是相同的情况?否?否,查询1本身是一个字符串,将被转换为查询。因此,根据您的回答,如果我将“替换为空”,它应该在第二个查询中起作用,对吗?您不能这样做。要么在其中放入单独的值,要么像在查询1中那样使用动态查询