Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 检查“选择”中的数据,然后插入新值_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 检查“选择”中的数据,然后插入新值

Sql 检查“选择”中的数据,然后插入新值,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,所以,我有一些包含数据的表,我需要根据旧数据获取一个包含新数据的新表,然后将它们插入临时表中进行下一步处理 但是我的SQL有一些问题 DECLARE @PGNPGE float, @PGHTTP400PCT float, @PGHTTP500PCT float, @PGSLPCT float, @PGTME float; DECLARE @tempTable TABLE (

所以,我有一些包含数据的表,我需要根据旧数据获取一个包含新数据的新表,然后将它们插入临时表中进行下一步处理

但是我的SQL有一些问题

DECLARE @PGNPGE float,
            @PGHTTP400PCT float,
            @PGHTTP500PCT float,
            @PGSLPCT float,
            @PGTME float;

    DECLARE @tempTable TABLE (
        PViews int, 
        Http400 int, 
        Http500 int, 
        PTime int, 
        ExclSimul int, 
        DispSimul int, 
        SlowPages int, 
        AESWA int
    );

    IF EXISTS (SELECT COUNT(*) FROM [ApplicationThreshold] WHERE [ApplicationID] = @AppID)
    BEGIN
        SELECT @PGNPGE = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 6;
        SELECT @PGHTTP400PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 31;
        SELECT @PGHTTP500PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 12;
        SELECT @PGSLPCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 49;
        SELECT @PGTME = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 72;
    END
    ELSE
    BEGIN
        SELECT @PGNPGE = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 6;
        SELECT @PGHTTP400PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 31;
        SELECT @PGHTTP500PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 12;
        SELECT @PGSLPCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 49;
        SELECT @PGTME = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 72;
    END

    INSERT INTO @tempTable (
        PViews, 
        Http400, 
        Http500, 
        PTime, 
        ExclSimul, 
        DispSimul, 
        SlowPages, 
        AESWA )
    SELECT 
        [PViews] = CASE WHEN sel.[PGNPGE] < @PGNPGE THEN 1 ELSE 0 END,
        [Http400] = CASE WHEN sel.[PGHTTP400PCT] > @PGHTTP400PCT THEN 1 ELSE 0 END, 
        [Http500] = CASE WHEN sel.[PGHTTP500PCT] > @PGHTTP500PCT THEN 1 ELSE 0 END, 
        [PTime] = CASE WHEN sel.[PGTME] > @PGTME THEN 1 ELSE 0 END, 
        [ExclSimul] = CASE WHEN ([PViews] + [Http400] + [Http500] + [PTime]) >= 1 THEN 1 ELSE 0 END, 
        [DispSimul] = CASE WHEN ([PViews] + [Http400] + [Http500] + [PTime]) > 1 THEN ([PViews] + [Http400] + [Http500] + [PTime]) ELSE 0 END, 
        [SlowPages] = CASE WHEN sel.[PGSLPCT] > @PGSLPCT THEN 1 ELSE 0 END, 
        [AESWA] = CASE WHEN [ExclSimul] >=1  THEN 0 ELSE [SlowPages] END
    FROM (SELECT [PGNPGE], [PGHTTP400PCT], [PGHTTP500PCT], [PGSLPCT], [PGTME]
            FROM [dbo].[TimeValue]
            WHERE [ApplicationID] = @AppID
            AND [Time] BETWEEN @DateFrom AND @DateTo) sel;

SELECT * FROM @tempTable;
以及添加新值时出现的错误

信息207,16级,状态1,第59行 列名“PViews”无效

信息207,16级,状态1,第59行 列名“Http400”无效

信息207,16级,状态1,第59行 列名称“Http500”无效

信息207,16级,状态1,第59行 列名“PTime”无效

Msg 207,16级,状态1,第60行 列名“PViews”无效

Msg 207,16级,状态1,第60行 列名“Http400”无效

Msg 207,16级,状态1,第60行 列名称“Http500”无效

Msg 207,16级,状态1,第60行 列名“PTime”无效

Msg 207,16级,状态1,第60行 列名“PViews”无效

Msg 207,16级,状态1,第60行 列名“Http400”无效

Msg 207,16级,状态1,第60行 列名称“Http500”无效

Msg 207,16级,状态1,第60行 列名“PTime”无效

Msg 207,16级,状态1,第62行 无效的列名“ExclSimul”

Msg 207,16级,状态1,第62行 列名“SlowPages”无效


尝试使用CTE在表变量中插入数据:

declare @PGNPGE float,
    @PGHTTP400PCT float,
    @PGHTTP500PCT float,
    @PGSLPCT float,
    @PGTME float;

declare @tempTable TABLE 
(
    PViews int, 
    Http400 int, 
    Http500 int, 
    PTime int, 
    ExclSimul int, 
    DispSimul int, 
    SlowPages int, 
    AESWA int
);

IF EXISTS (SELECT COUNT(*) FROM [ApplicationThreshold] WHERE [ApplicationID] = @AppID)
BEGIN
    SELECT @PGNPGE = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 6;
    SELECT @PGHTTP400PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 31;
    SELECT @PGHTTP500PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 12;
    SELECT @PGSLPCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 49;
    SELECT @PGTME = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 72;
END
ELSE
BEGIN
    SELECT @PGNPGE = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 6;
    SELECT @PGHTTP400PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 31;
    SELECT @PGHTTP500PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 12;
    SELECT @PGSLPCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 49;
    SELECT @PGTME = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 72;
END

;with ThresholdCTE
as
(
    SELECT 
        case when sel.[PGNPGE] < @PGNPGE then 1 else 0 end as [PViews],
        case when sel.[PGHTTP400PCT] > @PGHTTP400PCT then 1 else 0 end as [Http400], 
        case when sel.[PGHTTP500PCT] > @PGHTTP500PCT then 1 else 0 end as [Http500], 
        case when sel.[PGTME] > @PGTME then 1 else 0 end as [PTime], 
        case when ([PViews] + [Http400] + [Http500] + [PTime]) >= 1 then 1  else 0 end as [ExclSimul], 
        case when ([PViews] + [Http400] + [Http500] + [PTime]) > 1 then ([PViews] + [Http400] + [Http500] + [PTime]) else 0 end as [DispSimul], 
        case when sel.[PGSLPCT] > @PGSLPCT then 1 else 0 end as [SlowPages], 
        case when [ExclSimul] >=1 then 0 else [SlowPages] end as [AESWA]
    from [dbo].[TimeValue]
    where [ApplicationID] = @AppID
          and [Time] between @DateFrom and @DateTo
)

insert into @tempTable 
(
    PViews, 
    Http400, 
    Http500, 
    PTime, 
    ExclSimul, 
    DispSimul, 
    SlowPages, 
    AESWA 
)
select
    PViews, 
    Http400, 
    Http500, 
    PTime, 
    ExclSimul, 
    DispSimul, 
    SlowPages, 
    AESWA 
from [ThresholdCTE]


SELECT * FROM @tempTable;

不能在定义表别名的同一选择中引用该表别名。如果你愿意,你可以使用子查询,或者只是重复这个表达式。这只是分配别名的另一种方式。列名“PViews”和其他列名无效