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

时间:2013-10-19 11:14:55

标签: sql

当前表

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)

这不起作用,为什么?

3 个答案:

答案 0 :(得分:3)

它不起作用,因为你不能将一个字符串放入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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果你在SQL Server中,你可能需要使用动态sql;这需要您以字符串形式构建查询,然后在完成

时执行它

将您的empid声明更改为

  DECLARE @Empid VARCHAR(MAX) = 'SELECT * FROM cmsEmployee WHERE EmployeeID IN( '

当您选择它时,添加一个关闭括号(如果您愿意,可以按步骤构建字符串。)

select @empid = @empid + ')'

如果你接受了你的印刷声明,它应该在你正确的时候运行;在你的代码中运行它

exec sp_exectutesql @empID