我的任务是编写一个供单个用户使用的小应用程序.这个应用程序将从我们的主员工DB中提取约500个员工姓名/部门.然后,用户将为每个员工输入5个字段.这5个字段通常每年只更改一次,但最坏情况可能是每月一次.我应该在任何给定的时间跟踪2年的价值.
我看过SQLite和SQL CE,我对其中任何一个都不感兴趣.SQL CE不希望允许数据文件驻留在网络共享上.(只有一个用户,但他们将所有文档存储在每天备份的私有共享上).
SQLite似乎更适合该法案,但它没有整合到没有包装或任何东西的Visual Studio中.
另一件需要考虑的事情是,我们的人员精通MS的SQL Server而其他方面很少,因此他们对SQLlite的理解对我的老板来说将是一件重要的事情.
所以我的问题是:如果我将数据存储在内存中的对象并在保存时将它们序列化为磁盘怎么办?我做了一个快速测试,有10k人(我们的使用量最多只有500-1000)和10年(如果他们每月更新他们的数据10个月,非常不可能)只会导致我的演示应用程序使用30MB记忆.即使使用GUID随机填充所有字符串,也填充该数据是即时的.这是一个坏主意吗?它是一个相当简单的应用程序,在这种情况下,它似乎对我好.
我们目前正在考虑设置我们的字符串列,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) 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_id
在last 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) 在 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) 我很难用语言表达我想要的东西(这个标题是我能带给我的最好的东西),使用模式更容易,但是我将首先尝试说明自己。
我想使用以下规则通过查询进行排序:
点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) 我正在插入如下所示的数据:
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) 我发现了我认为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) 我有以下查询: -
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 ×8
sql-server ×4
mysql ×2
.net ×1
bulkinsert ×1
foreign-keys ×1
hive ×1
join ×1
oracle ×1
sql-order-by ×1
t-sql ×1