2013-10-19 31 views
-2

當前表我寫了一個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

它不起作用,因爲您不能將單個字符串放入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 
+0

親愛的,打印@Empid o/p就像.. ..逗號分隔值,如果有疑問請先運行此操作。 –

+1

仔細看看我的例子。那麼你會明白。無論您在字符串中插入多少引號:'@ Empid'都是一個字符串。 –

0

如果您編寫由多個部分組成的直接查詢,則不應該忘記添加GO來執行每個部分。

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

如果您在SQL Server中,您可能需要使用動態sql;需要你建立你的查詢起來作爲一個字符串,則當其完成

更改您的EMPID聲明

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

當你選擇它添加一個閉括號(你可以建立串起來執行它步驟如果你想。)

select @empid = @empid + ')' 

如果你把你的打印聲明,它應該運行,當你有它的權利;在您的代碼中運行它

exec sp_exectutesql @empID 
+0

亞工作,但我想運行這個查詢,而不使用EXEC然後如何? –

+0

你是如何將參數放入查詢中的?你可以把它們放到臨時表中並加入它 – u07ch

相關問題