Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
必须在sql过程中声明标量变量“@tempAttent”?_Sql_Sql Server - Fatal编程技术网

必须在sql过程中声明标量变量“@tempAttent”?

必须在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

我收到一个错误,说明我必须声明表变量@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 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后,它正在工作。请点击验收指标以获得最佳答案。