0

テーブル変数「@tempattend」を宣言する必要があるというエラーが表示されます。私を助けてください。@tempattendテーブルを@tempTableSelect変数に渡すにはどうすればよいですか?

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
4

2 に答える 2

5

あなたは書くべきです

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

@tempattend一時テーブル変数です。のような値ではなく、テーブルを保持します@datelist

EXECしかし、テーブルから直接選択するのではなく、なぜですか?


EXEC考えてみてください:ステートメントでメモリ一時テーブルを使用できない場合があります。これを回してみる

DECLARE @tempattend Table

の中へ

CREATE TABLE #tempattend

のすべての出現を に変更@tempattend#tempattendます。

于 2013-10-16T13:16:03.900 に答える
0

Thorsten Dittmar's answer をフォローアップすると、なぜこのようなものではないのでしょうか?

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

変数を使用して動的な選択を行おうとしていることは承知していますが、これは、テーブルを正規化する、クライアント コードに必要な列を選択させる@dateList必要があるという強いシグナルです。(すべてを生の SQL で行う必要はありません。)

列名としての数字? 確かに問題あり。

于 2013-10-16T13:28:40.627 に答える