Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 我们将对这些数据进行大量的报告。大多数数据库都能很好地处理空值,并且有一个定义良好的数据模型将使报表比试图根据EAV模型生成报表容易得多。@N West。在这种特殊情况下,实体属性值模型似乎是合适的,因为度量是时间的函数,而不是彼此的函数。因此,报告很可能_Sql Server_Views_Data Warehouse_Database Performance_Sparse Columns - Fatal编程技术网

Sql server 我们将对这些数据进行大量的报告。大多数数据库都能很好地处理空值,并且有一个定义良好的数据模型将使报表比试图根据EAV模型生成报表容易得多。@N West。在这种特殊情况下,实体属性值模型似乎是合适的,因为度量是时间的函数,而不是彼此的函数。因此,报告很可能

Sql server 我们将对这些数据进行大量的报告。大多数数据库都能很好地处理空值,并且有一个定义良好的数据模型将使报表比试图根据EAV模型生成报表容易得多。@N West。在这种特殊情况下,实体属性值模型似乎是合适的,因为度量是时间的函数,而不是彼此的函数。因此,报告很可能,sql-server,views,data-warehouse,database-performance,sparse-columns,Sql Server,Views,Data Warehouse,Database Performance,Sparse Columns,我们将对这些数据进行大量的报告。大多数数据库都能很好地处理空值,并且有一个定义良好的数据模型将使报表比试图根据EAV模型生成报表容易得多。@N West。在这种特殊情况下,实体属性值模型似乎是合适的,因为度量是时间的函数,而不是彼此的函数。因此,报告很可能是针对每个记录中存在的属性进行的。但是这个模型不是通用的,我同意你的观点。我在考虑这个。这种权衡可能是值得的。问题是如何最好地一次将多行插入值表?当然,可能有25列会在每一帧中进行更改,因此单独完成每一列的工作不应该让服务器感到不知所措。想法?


我们将对这些数据进行大量的报告。大多数数据库都能很好地处理空值,并且有一个定义良好的数据模型将使报表比试图根据EAV模型生成报表容易得多。@N West。在这种特殊情况下,实体属性值模型似乎是合适的,因为度量是时间的函数,而不是彼此的函数。因此,报告很可能是针对每个记录中存在的属性进行的。但是这个模型不是通用的,我同意你的观点。我在考虑这个。这种权衡可能是值得的。问题是如何最好地一次将多行插入值表?当然,可能有25列会在每一帧中进行更改,因此单独完成每一列的工作不应该让服务器感到不知所措。想法?我还发现以下是一次完成多个插入的推荐和有用的方法<代码>在表(FirstCol,SecondCol)中插入值('First',1),('Second',2),('Third','3',('Fourth','4')('etch')选择@val2=ISNULL(v.val2,@val2),@val2作为val2_列——但这不起作用,因为不允许在数据检索的同时进行数据赋值。Express?数据仓库?对不起,“10g数据库”太多了,它不是数据仓库。也许是一个数据集市。这很小-您没有机会将包含真实数据的任何内容作为express的目标。太小,太有限(ram,cpu)。今天我想到了几件事。1.分析函数,如Lag或First_值(但我不知道如何用null进行分区)。2.只需使用一个变量:
选择@val2=ISNULL(v.val2,@val2),@val2作为val2_列
——但这不起作用,因为不允许在数据检索的同时进行数据赋值。Express?数据仓库?对不起,“10g数据库”太多了,它不是数据仓库。也许是一个数据集市。这很小-您没有机会将包含真实数据的任何内容作为express的目标。太小,太有限(ram,cpu)。
SELECT ISNULL(
           val1,
           (
               SELECT TOP 1 val1
               FROM   [values] subv
               WHERE  subv.id <= v.id
                      AND subv.val1 IS NOT NULL
               ORDER BY
                      subv.id DESC
           )
       ) AS val1,
       ISNULL(
           val2,
           (
               SELECT TOP 1 val2
               FROM   [values] subv
               WHERE  subv.id <= v.id
                      AND subv.val2 IS NOT NULL
               ORDER BY
                      subv.id DESC
           )
       ) AS val2,
       ISNULL(
           val3,
           (
               SELECT TOP 1 val3
               FROM   [values] subv
               WHERE  subv.id <= v.id
                      AND subv.val3 IS NOT NULL
               ORDER BY
                      subv.id DESC
           )
       ) AS val3
FROM   [values] v
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

USE Test

ALTER DATABASE Test SET TRUSTWORTHY ON
GO

IF OBJECT_ID ('cached_value') is not null
BEGIN

    DROP FUNCTION cached_value
END
GO

IF EXISTS (SELECT * FROM sys.assemblies WHERE name = 'SqlClr') 
BEGIN
    DROP ASSEMBLY SqlClr
END
GO

CREATE ASSEMBLY SqlClr 
FROM 'C:\SqlClr\bin\Debug\SqlClr.dll'
WITH PERMISSION_SET = UNSAFE 
GO 

CREATE FUNCTION cached_value(@rowid bigint, @col int, @current_value bigint) 
RETURNS bigint
AS EXTERNAL NAME SqlClr.[SqlClr.StoredProcedures].[cached_value]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Diagnostics;
using System.Data.SqlClient;

namespace SqlClr
{
    public class StoredProcedures
    {
        public static long last_rowid;
        public static Dictionary<int, long> values = new Dictionary<int, long>();

        [SqlFunction(DataAccess = DataAccessKind.Read, IsDeterministic = false)]
        public static Nullable<long> cached_value(long rowid, int col, Nullable<long> current_value)
        {
            if (rowid < last_rowid)
            {
                values.Clear();
            }

            last_rowid = rowid;

            if (current_value.HasValue)
            {
                values[col] = current_value.Value;
                return current_value.Value;
            }

            if (values.ContainsKey(col))
                return values[col];
            else
                return null;
        }
    }
}
SELECT 
dbo.cached_value(id, 1, val1) AS val1,
dbo.cached_value(id, 2, val2) AS val2,
......
dbo.cached_value(id, 25, val25) AS val25
FROM LotsOfValues