必须在sql过程中声明标量变量“@tempAttent”?
我收到一个错误,说明我必须声明表变量@TempAttent。 请帮帮我。如何将@TempAttention表传递给@EntertableSelect变量必须在sql过程中声明标量变量“@tempAttent”?,sql,sql-server,Sql,Sql Server,我收到一个错误,说明我必须声明表变量@TempAttent。 请帮帮我。如何将@TempAttention表传递给@EntertableSelect变量 ALTER PROCEDURE [dbo].[Rl_LM_AHS] @SupEmpID nvarchar(10), @SectorName nvarchar(300), @dateList nvarchar(300), @Month nvarchar(5), @Year nvarchar(5), @SearchType nvarc
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
你应该写
set @tempTableSelect = 'select [Emp.ID],Name,' + @dateList +' from @tempattend'
@TempAttent是一个临时表变量。它包含一个表,而不是像@datelist这样的值
但是为什么要执行EXEC而不是直接从表中选择
想想看:在EXEC语句中使用内存临时表可能是不可能的。试着转动这个
DECLARE @tempattend Table
进入
并将@tempAttain的每一次出现都改为tempAttain。你应该写
set @tempTableSelect = 'select [Emp.ID],Name,' + @dateList +' from @tempattend'
@TempAttent是一个临时表变量。它包含一个表,而不是像@datelist这样的值
但是为什么要执行EXEC而不是直接从表中选择
想想看:在EXEC语句中使用内存临时表可能是不可能的。试着转动这个
DECLARE @tempattend Table
进入
并将@tempAttent的每一次出现都改为tempAttent。继Thorsten Dittmar的回答之后,为什么不做类似的事情呢
select empID,
CONCAT(emp_fname,' ',
COALESCE(emp_Mname,''),
COALESCE(nullif(emp_Lname,''))) as [Name]
from EShiftHistory
我知道您正在尝试使用@dateList变量进行一些动态选择,但这是一个强烈的信号,即您应该规范化您的表,或者让您的客户机代码选择它想要的列。并非所有操作都需要在原始SQL中完成
数字作为列名?肯定有问题。继Thorsten Dittmar的回答之后,为什么不做类似的事情呢
select empID,
CONCAT(emp_fname,' ',
COALESCE(emp_Mname,''),
COALESCE(nullif(emp_Lname,''))) as [Name]
from EShiftHistory
我知道您正在尝试使用@dateList变量进行一些动态选择,但这是一个强烈的信号,即您应该规范化您的表,或者让您的客户机代码选择它想要的列。并非所有操作都需要在原始SQL中完成
数字作为列名?肯定有问题。请按照您的接受率进行操作。如果你不花时间接受答案,stackoverflow社区将不会得到应有的好处。请按照你的接受率工作。如果您不花时间接受答案,stackoverflow社区将不会获得应有的好处。由于datelist可以是多个列,因此需要Exec。不能从选项卡变量中进行选择,因为它位于不同的作用域中。据我所知,您的答案是错误的。更改后出现错误,必须声明表变量@tempatent。请查看我的编辑。这里不能使用内存中的临时表变量。您需要创建一个真正的临时表。那么这两个临时表之间的区别是什么呢?请解释一下,因为datelist可以是几列,所以需要使用EXEC。不能从选项卡变量中进行选择,因为它位于不同的作用域中。据我所知,您的答案是错误的。更改后出现错误,必须声明表变量@tempatent。请查看我的编辑。这里不能使用内存中的临时表变量。您需要创建一个真正的临时表。那么这两个临时表之间的区别是什么。请解释一下谢谢大家的回复,更改为创建表tempattendExcellent后,它正在工作。请点击“接受指标”以获得最佳答案。感谢大家的回复,更改为创建表tempattendExcellent后,它正在工作。请点击验收指标以获得最佳答案。