我收到一条错误,指出我必须声明表变量“@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
答案 0 :(得分:5)
你应该写
set @tempTableSelect = 'select [Emp.ID],Name,' + @dateList +' from @tempattend'
@tempattend
是一个临时表变量。它拥有一个表,而不是@datelist
之类的值。
但为什么你EXEC
而不是直接从表中选择?
想一想:在EXEC
语句中可能无法使用内存临时表。试试这个
DECLARE @tempattend Table
到
CREATE TABLE #tempattend
并将@tempattend
的每次出现更改为#tempattend
。
答案 1 :(得分:0)
跟进Thorsten Dittmar的答案,为什么不这样呢?
select empID,
CONCAT(emp_fname,' ',
COALESCE(emp_Mname,''),
COALESCE(nullif(emp_Lname,''))) as [Name]
from EShiftHistory
我意识到您正尝试使用@dateList
变量进行一些动态选择,但这是一个强烈信号,您应该规范化表或,只需让您的客户端代码选出它想要哪些列。 (并非所有内容都需要在原始SQL中完成。)
数字作为列名?绝对有问题。