2013-10-16 29 views
0

我收到一個錯誤,指出我必須聲明表變量「@tempattend」。 請幫幫我。如何將@tempattend表格變爲@tempTableSelect變量?必須在sql過程中聲明標量變量「@tempattend」?

ALTER PROCEDURE [dbo].[Rl_LM_AHS] 

@SupEmpID nvarchar(10), 
@SectorName nvarchar(300), 
@dateList nvarchar(300), 
@Month nvarchar(5), 
@Year nvarchar(5), 
@SearchType nvarchar(10) 


AS 
BEGIN 
    SET NOCOUNT ON; 
    declare @tempTableSelect nvarchar(2000) 
    DECLARE @tempattend Table 
(
    [Emp.ID] nvarchar(10), 
    [Name] nvarchar(60), 
    [1] nvarchar(3) null, 
    [2] nvarchar(3) null, 
    [3] nvarchar(3) null 
    upto .............. 
    [31] nvarchar(3) null 
) 

IF (@SearchType = 1) 
    BEGIN 

--INSERT TEAM LIST TO @tempattend TABLE 
insert into @tempattend([Emp.ID],[Name]) (Select EMP.empID as [Emp.ID],CONCAT(EMP.emp_fname,' ',COALESCE(nullif(EMP.emp_Mname,'') +' ',''),COALESCE(nullif(EMP.emp_Lname,'') +' ','')) as [Name] from EShiftHistory) 

set @tempTableSelect = 'select [Emp.ID],Name,' + @dateList +' from @tempattend' 

    EXEC (@tempTableSelect) 

    END 


END 
+3

請在你的接受率工作。如果你沒有花時間接受答案,那麼stackoverflow社區將不會受益,因爲它應該。 –

回答

5

你應該寫

set @tempTableSelect = 'select [Emp.ID],Name,' + @dateList +' from @tempattend' 

@tempattend是一個臨時表變量。它擁有一個表格,而不是像@datelist那樣的一些值。

但爲什麼你EXEC而不是直接從表中選擇?


試想想它:它可能無法使用內存臨時表中EXEC語句。嘗試關閉此

DECLARE @tempattend Table 

CREATE TABLE #tempattend 

@tempattend每一次出現改變#tempattend

+0

由於日期列表需要執行,因爲日期列表可以是多列。您不能從tabel變量中選擇,因爲它在不同的範圍內。所以據我所知,你的回答是錯誤的 –

+0

在更改後出現錯誤,必須聲明表變量「@tempattend」。 –

+0

請參閱我的編輯。你不能在這裏使用內存中的臨時表變量。您需要創建一個「真實」臨時表。 –

0

跟隨Thorsten Dittmar的回答,爲什麼不是這樣?

select empID, 
CONCAT(emp_fname,' ', 
COALESCE(emp_Mname,''), 
COALESCE(nullif(emp_Lname,''))) as [Name] 
    from EShiftHistory 

我知道你想要做的@dateList變量一些動態的選擇,但是這是一個強烈的信號,你要麼正常化你的表只是讓你的客戶端代碼挑出來就是了其列。 (並非所有內容都需要在原始SQL中完成。)

數字作爲列名嗎?肯定有問題。

+1

謝謝大家的回覆,改成CREATE TABLE之後就行了#tempattend –

+0

優秀。請點擊「接受」指標以獲得最佳答案。 – catfood