我写了一个SQL查询,但没有运行,为什么?

我写了一个SQL查询,但没有运行,为什么?,sql,Sql,当前表 EmployeeID CompanyID EmployeeCode EmployeeName 1001 C001 11919 ABC 1002 C001 10974 PQR 1003 C001 11890 XYZ 1004 C001 11621 LMN 像这样询问 DECLA

当前表

EmployeeID  CompanyID   EmployeeCode    EmployeeName
    1001        C001         11919     ABC
    1002        C001         10974         PQR
    1003        C001         11890     XYZ
    1004        C001         11621     LMN
像这样询问

     DECLARE @Empid VARCHAR(MAX)
SELECT @Empid= COALESCE(@Empid +',','')+''''+EmployeeID+'''' FROM cmsEmployee WHERE employeeCode IN('11919','10974','11890','11621' )
print @Empid
SELECT * FROM cmsEmployee WHERE EmployeeID IN( @Empid)

这不起作用,为什么?

它不起作用,因为您不能将单个字符串放入
in
子句中,并期望引擎解析它

您只能像在第一次查询中使用它时那样在其中输入多个单个值

where id in ('1','2')  -- works beause that are two SEPERATE values
where id in ('1,2')    -- works not because it is ONE string

如果您编写了一个由多个部分组成的直接查询,您不应该忘记添加GO以执行每个部分

Select ... 
GO
Print ... 
GO
Select ... 

如果您使用的是SQL Server,则可能需要使用动态SQL;这需要您将查询构建为字符串,然后在查询完成时执行它

将empid声明更改为

  DECLARE @Empid VARCHAR(MAX) = 'SELECT * FROM cmsEmployee WHERE EmployeeID IN( '
选择后,添加一个右括号(如果愿意,可以分步构建字符串)

如果您使用打印语句,它应该在正确的时候运行;在代码中运行它

exec sp_exectutesql @empID

是的,这很有效,但是我想在不使用EXEC的情况下运行这个查询,那么如何?首先,您如何将参数输入到查询中?您可以拆分它们,将它们放在临时表中并连接到它亲爱的,print@Empid o/p就像..一个逗号分隔的值,如果有疑问,请先运行这个。仔细看我的示例。那你就会明白了。无论在字符串中插入多少引号:
@Empid
都是一个字符串。
exec sp_exectutesql @empID