运行此代码时:
declare @SQL NVARCHAR(max);
declare @intFlag INT;
set @intFlag = 2;
SET @SQL = ' SELECT * into [##tmp1]
FROM servicesstats_0511_0412 s WHERE department=''ACC''
and ((SELECT COUNT(*) FROM servicesstats_0511_0412 WHERE department <> ''ACC''
and s.studentid=studentid ) = ' + @intFlag + ')';
EXEC SP_EXECUTESQL @SQL
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
将 varchar 值 'SELECT * 转换为 [##tmp1] FROM servicesstats_0511_0412 s WHERE Department='ACC' and ((SELECT COUNT(*) FROM servicesstats_0511_0412 WHERE department <> 'ACC' and s.studentid=studentid ) = 时转换失败' 到数据类型 int。
servicesstats_0511_0412 将是动态的,因此需要动态 SQL。
我认为这不应该发生,因为 count(*) 总是返回一个 …