小编HLG*_*GEM的帖子

不使用数据库但在内存对象中使用是不是很糟糕?

我的任务是编写一个供单个用户使用的小应用程序.这个应用程序将从我们的主员工DB中提取约500个员工姓名/部门.然后,用户将为每个员工输入5个字段.这5个字段通常每年只更改一次,但最坏情况可能是每月一次.我应该在任何给定的时间跟踪2年的价值.

我看过SQLite和SQL CE,我对其中任何一个都不感兴趣.SQL CE不希望允许数据文件驻留在网络共享上.(只有一个用户,但他们将所有文档存储在每天备份的私有共享上).

SQLite似乎更适合该法案,但它没有整合到没有包装或任何东西的Visual Studio中.

另一件需要考虑的事情是,我们的人员精通MS的SQL Server而其他方面很少,因此他们对SQLlite的理解对我的老板来说将是一件重要的事情.

所以我的问题是:如果我将数据存储在内存中的对象并在保存时将它们序列化为磁盘怎么办?我做了一个快速测试,有10k人(我们的使用量最多只有500-1000)和10年(如果他们每月更新他们的数据10个月,非常不可能)只会导致我的演示应用程序使用30MB记忆.即使使用GUID随机填充所有字符串,也填充该数据是即时的.这是一个坏主意吗?它是一个相当简单的应用程序,在这种情况下,它似乎对我好.

.net sql

6
推荐指数
1
解决办法
181
查看次数

SqlServer和nvarchar(最大)

我们目前正在考虑设置我们的字符串列,nvarchar(max)而不是指定一个特定的长度,以防止在数据库中没有足够空间存储字符串的任何问题.我只是想知道这是不是一件好事,或者它是否会引起任何问题,因为它可以做到那时为什么要指定长度nvarchar(10)而不是nvarchar(max).我们也使用varbinary(max)了很多,因为我们不知道我们需要多少二进制数据所以我不知道这是多少效果或者说我们的插入没有我想的那么快.这是一个示例表:

CREATE TABLE [dbo].[SAMPLETABLE] (  
[ID] [uniqueidentifier] NOT NULL,  
[FIELD1] [int] NOT NULL,  
[FIELD2] [nvarchar] (2000) NULL,  
[FIELD3] [nvarchar] (max) NULL,  
[FIELD4] [uniqueidentifier] NULL,  
[FIELD5] [int] NULL,  
[FIELD6] [nvarchar] (2000) NULL,  
[FIELD7] [varbinary] (max) NULL,  
[FIELD8] [varbinary] (max) NULL,  
[FIELD9] [varbinary] (max) NULL,  
[FIELD10] [uniqueidentifier] NULL,  
[FIELD11] [nvarchar] (2000) NULL,  
[FIELD12] [varbinary] (max) NULL,  
[FIELD13] [varbinary] (max) NULL,  
[FIELD14] [bit] NULL,  
[FIELD15] [uniqueidentifier] NULL,  
[FIELD16] [varbinary] (max) NULL,  
[FIELD17] [bit] NULL,  
[FIELD18] …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2008

5
推荐指数
2
解决办法
1万
查看次数

SQL Query JOIN with Table

select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as 
timestamps from testingtable2 LATERAL VIEW explode(purchased_item) exploded_table
as prod_and_ts;
Run Code Online (Sandbox Code Playgroud)

通过使用上面的查询,我得到以下输出.

USER_ID     |    PRODUCT_ID    |   TIMESTAMPS
------------+------------------+-------------
1015826235       220003038067      1004841621
1015826235       300003861266      1005268799
1015826235       140002997245      1061569397
1015826235      *200002448035*     1005542471
Run Code Online (Sandbox Code Playgroud)

如果你比较以上output from the query with the below Table2 data,则product_idlast line of above output不与匹配ITEM_ID在下面的最后一行Table2数据.

BUYER_ID     |    ITEM_ID        |     CREATED_TIME 
-------------+-------------------+------------------------
1015826235       220003038067        2001-11-03 19:40:21
1015826235       300003861266        2001-11-08 18:19:59
1015826235       140002997245        2003-08-22 09:23:17
1015826235      *210002448035*       2001-11-11 22:21:11 …
Run Code Online (Sandbox Code Playgroud)

sql hive join

5
推荐指数
1
解决办法
6103
查看次数

MySQL 存储过程:如何从临时表中为 Select 声明游标?

在 MySQL 存储过程中,如何为从 select 语句创建的临时表声明游标。谢谢,

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_foo`$$
CREATE PROCEDURE sp_foo()
BEGIN   
    DROP TEMPORARY TABLE IF EXISTS `TmpMyTable`;
    CREATE TEMPORARY TABLE `TmpMyTable` (
        `id`            INT(11) NOT NULL AUTO_INCREMENT,
        `person_id`     INT(11) NOT NULL,
        `first_name`    VARCHAR(60) NOT NULL,
        `last_name`     VARCHAR(60) NOT NULL,
        PRIMARY KEY  (`id`),
        INDEX `idx_first_name` (`person_id`),
        INDEX `idx_first_name` (`first_name`)
    ) ENGINE=MYISAM         
        SELECT 
            id AS `person_id`,
            first_name,
            last_name
        FROM person
    ;

    DECLARE _person_id INT(11); 
    DECLARE personCursor CURSOR 
    FOR 
        SELECT * FROM TmpMyTable;       

    OPEN personCursor;
    LOOP
        FETCH personCursor …
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

5
推荐指数
1
解决办法
1万
查看次数

SQL ORDER BY-将具有相同值的列分组

我很难用语言表达我想要的东西(这个标题是我能带给我的最好的东西),使用模式更容易,但是我将首先尝试说明自己。

我想使用以下规则通过查询进行排序:

  1. 通过“组”列对查询进行分组。
  2. 将每个组的“主要”放在其组的顶部。
  3. 如果行的名称与主名称相同,则将其放在主名称之后。
  4. 将其余行按其名称放置

点1、2和4无关紧要。一个简单的ORDER BY技巧。但是我从未见过关于第3点的查询。

我已经阅读了一些有关RANK()ROW_NUMBER()函数的信息,并对其进行了尝试,但是我还没有创建想要的输出。我开始质疑是否有可能这样做。

无论如何,这里有一部分SQL可以对其进行测试。任何帮助表示赞赏。如果您可以找到更好的术语来描述这一点,请随时进行更正。

CREATE TABLE #TEMP
(
    COL_GROUP INT,
    COL_PRIMARY BIT,
    COL_NAME VARCHAR(3)
)

INSERT INTO 
    #TEMP 
VALUES
    (1,1,'AAA'),
    (2,0,'BBB'),
    (2,1,'BBB'),
    (1,0,'BBB'),
    (1,0,'AAA'),
    (2,0,'AAA')

SELECT
     *
FROM 
    #TEMP
ORDER BY 
    COL_GROUP, 
    COL_PRIMARY DESC, 
    COL_NAME

DROP TABLE #TEMP
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

COL_GROUP   COL_PRIMARY   COL_NAME
=========   ===========   ========
1           1             AAA  
1           0             AAA
1           0             BBB
2           1             BBB
2           0             AAA
2           0             BBB
Run Code Online (Sandbox Code Playgroud)

我想要的是此输出:

COL_GROUP   COL_PRIMARY   COL_NAME
=========   ===========   ======== …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-order-by

5
推荐指数
1
解决办法
596
查看次数

BULK INSERT SQL SERVER的乐趣 - 为指定的代码页输入不匹配或无效字符

我正在插入如下所示的数据:

   AA00000111   PSNH-OT J, SMITH    03/01/2011  10/11/1957  42  Male    Hartford    NH      Lorazepam   Benzodiazepines C
AA00000151  PSNH-OT BEN, HARRY  03/06/2011  07/18/1969  42  Male    Hartford    NH      Fentanyl    Synthetic Opioids   C
AA00000151  PSNH-OT URA, HARRISON   03/06/2011  07/18/1969  29  Male    Hartford    NH      Norfentanyl Synthetic Opioids   C
AA00000181  PSNH-OT WAYNE, GRIFFON  03/06/2011  09/01/1982  75  Female  Hartford    NH      cTHC (Marijuana metabolite) Illicits    C
Run Code Online (Sandbox Code Playgroud)

使用此批量插入:

use RadarDataMining
go

BULK INSERT tblRadarsAC
FROM 'C:\PerfLogs\radars.txt'
WITH
(
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

Msg 4864, Level 16, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server bulkinsert sql-server-2008

4
推荐指数
1
解决办法
5万
查看次数

是否可以创建列大小不匹配的外键

我发现了我认为Oracle中奇怪的行为

可以创建列大小与引用列大小不匹配的外键,这似乎不正确.当然,数据库应该强制匹配列大小,我在这里遗漏了什么?

我很确定MySQL不允许这样做

SQL> create table parent(col1 varchar2(255) primary key);
Table created.
SQL> create table child(col1 varchar2(20) primary key, constraint col1_fk foreign key (col1)
references parent(col1));
Table created.
Run Code Online (Sandbox Code Playgroud)

mysql sql oracle foreign-keys

4
推荐指数
1
解决办法
1127
查看次数

SQL连接两个不相关或具有主键的表

我有以下查询: -

select
dbo.table1.service,
dbo.table1.level_3_structure,
Sum(table1.Reduced) as Total_Reduced

from dbo.table1

where 
dbo.table1.Period = 'Cumulative'

Group by 
dbo.table1.service,
dbo.table1.level_3_structure
Run Code Online (Sandbox Code Playgroud)

结果与此类似: -

service          level_3_structure   Total_Reduced
Service 1            Structure1          11.76
Service 2            Structure2         239.86
Service 3            Structure3         940.29
Run Code Online (Sandbox Code Playgroud)

我有另一个表(表2),其中包含值service和level_3_structure,还包含一个名为'FTE'的列.

我想要做的是,基于service和level_3_structure加入此表并返回FTE的总和.

我已经尝试了下面的查询,但它似乎为每个加工行复制table1,导致大约830万个结果.

select
dbo.table1.service,
dbo.table1.level_3_structure,
Sum(dbo.table1.Reduced) as Total_Reduced,
Sum(dbo.table2.fte) as 'Total FTE'

from dbo.table1
left join dbo.table2
on dbo.table1.service = dbo.table2.service and
   dbo.table1.level_3_structure = dbo.table2.level_3_structure

where 
dbo.table1.Period = 'Cumulative'

Group by 
dbo.table1.service,
dbo.table1.level_3_structure
Run Code Online (Sandbox Code Playgroud)

sql sql-server

2
推荐指数
1
解决办法
2363
查看次数