在 Mysql workbench 中,我试图查询 whit 参数。
但是当我尝试将参数与静态字符串进行比较时,我有奇怪的行为。
为什么我没有像这样从查询中得到任何行?当我运行查询时,我确实得到了标题行,但我没有得到任何行。我确定表调用中有行。如果这太明显,请原谅我,但我在 MsSql 中做了一百万次没有问题。
set @kontakt ='fo' ;
select
*
from calls
where (@kontakt = 'fo');
我在搭建 PostgreSQL DB 时遇到问题,因为 npgsql 不能很好地处理同一列上有两个索引的表。这是我在 github 上的项目的链接。
我正在尝试查找这些索引/表,以便我可以将它们从我的脚手架命令中排除。
例子:
CREATE TABLE public.altreproc (
apcod integer NOT NULL,
aptip character(3),
apcam character(3),
CONSTRAINT altreproc_pkey PRIMARY KEY (apcod)
);
CREATE INDEX ialtreproc1
ON public.altreproc
USING btree
(aptip COLLATE pg_catalog."default");
CREATE INDEX ialtreproc2
ON public.altreproc
USING btree
(apcam COLLATE pg_catalog."default");
CREATE INDEX ialtreproc3
ON public.altreproc
USING btree
(aptip COLLATE pg_catalog."default" DESC);
我的问题是当一个表有 2 个不同的索引具有相同的列(一个ASC
和一个DESC
)时;我试图在我试图搭建的数据库中查询这样的表/索引。
我的目标是找到在同一列上包含多个索引的表。
由于我来自 MSSQL 世界,我很困惑,在查询中发生了什么,你有 group by 子句和 select 中的其他列不通过聚合函数。
当 MySql 执行这样的查询时,我感到震惊
select * from myTable
group by columnThatIsNotPk
或者像这样摆弄 http://sqlfiddle.com/#!9/b30bf5/1
我的问题是:
当我尝试处理我的 SSAS2012 Olap Cube 时,我得到了很多这样的错误
Errors in the OLAP storage engine:
A duplicate attribute key has been found when processing: Table: 'dbo_ART'
,Column: 'NAZIV'
,Value: 'ARMATURA ZA KERAMIĆKI VODOKOTLIĆ'.
The attribute is 'Art Naziv'.
Errors in the OLAP storage engine: The record was skipped because the attribute key is a duplicate.
Attribute: Art Naziv of Dimension: ART from Database: robot, Record: 2451.
当我调查此错误时,我发现在我的事务数据库表 ART 中存在两个完全不同的行,其值为 NAZIV ='ARMATURA ZA KERAMIĆKI VODOKOTLIĆ'和'Č' insead 放在那个地方是字母'C'。
如果我做
select naziv
from art
group by naziv
having count(*)>1
我没有得到任何重复的行。
因为一些事务数据库如何知道字母'Č','Ć','C'之间的区别。
但是 OLAP 多维数据集在处理 Dimension ART 时将所有这些字母读取为“C”并获取重复键。
我的事务数据库位于 SQL 2012 R2 标准服务器上,排序规则 =Croatian_CI_AS 服务器通常设置为 Latin1_General_CI_AI。我的 SSAS 2012 Enterprise 服务器将 Windows 排序规则设置为 Latin1_General 并且所有敏感都未选中。
我应该如何设置 SSAS 服务器的语言设置以避免此错误。那是“口音敏感”设置。或者我需要将我的 Windows 排序规则更改为其他内容?
我有一个我依赖的愚蠢应用程序,里面有硬编码的连接字符串。
为了提高我的 SQL Server 的安全性,我想让 SQL 用户与一个硬编码的内部应用程序相同,但我希望允许该用户只能从某个主机(IP 地址)使用 SQL Server。
我的任务是在 SQL Server 2012 下将旧的 Clarion App 转换为新的。
我只有 200 个带有 TPS 扩展名的表,我只能通过名为 TopScan 的程序打开它们。(没有 odbc,没有技术文档,没有支持)。
我正在制作一个将数据提取到 SQL 的 C# 程序。
我可以在这样的文本中看到的数据结构
FILE,DRIVER('TOPSPEED'),NAME('C:\bIRA2013\BIRA_ARHIMED\PART.TPS')
PART:K_SIFPAR KEY(+PART:SIFPAR),NOCASE,PRIMARY
PART:K_ZIRO KEY(+PART:ZIRO),DUP,NOCASE
PART:K_NAZIV1 KEY(+PART:NAZIV1),DUP,NOCASE
PART:K_GRUPA KEY(+PART:GRUPA),DUP,NOCASE
PART:K_PORBR KEY(+PART:PORBR),DUP,NOCASE
PART:K_KOMER_SIFPAR KEY(+PART:KOMER,+PART:SIFPAR),DUP,NOCASE
PART:K_BANKA_SIFPAR KEY(+PART:BANKA,+PART:SIFPAR),DUP,NOCASE
PART:K_GRAD_SIFPAR KEY(+PART:GRAD,+PART:SIFPAR),DUP,NOCASE
PART:K_NACPL_SIFPAR KEY(+PART:NACPL,+PART:SIFPAR),DUP,NOCASE
PART:K_NACPLD_SIFPAR KEY(+PART:NACPLD,+PART:SIFPAR),DUP,NOCASE
PART:OPIS MEMO(2000)
RECORD RECORD
PART:SIFPAR STRING(10)
PART:ZIRO STRING(20)
PART:PORBR STRING(13)
PART:PORBRBIH STRING(10)
PART:NAZIV1 STRING(40)
PART:NAZIV2 STRING(40)
PART:GRUPA STRING(10)
PART:KUP STRING(2)
PART:DOB STRING(2)
PART:ADRESA STRING(30)
PART:GRAD STRING(25)
PART:PBROJ STRING(5)
PART:TEL1 STRING(15)
PART:TEL2 STRING(15)
PART:FAX STRING(15)
PART:OSOBA STRING(30)
PART:RABAT DECIMAL(5,2)
PART:RABATD DECIMAL(5,2)
PART:CASSA DECIMAL(5,2)
PART:CASSAD DECIMAL(5,2)
PART:NACPL STRING(2)
PART:NACPLD STRING(2)
PART:KOEF DECIMAL(5,4)
PART:DVO LONG
PART:BANKA STRING(6)
PART:VEZDOK STRING(10)
PART:IZJAVA STRING(10)
PART:KOMER STRING(3)
PART:EMAIL STRING(40)
PART:WWW STRING(60)
PART:ID STRING(2)
PART:D LONG
END
END
我认为 RECORD 和 END 之间的 ROWS 代表表的结构。当我浏览所有表格时,我发现列表中的以下数据类型
STRING(10) --many sizes (10,20,100,200)
CSTRING(256) --many sizes (2000,3000)
LONG
DECIMAL(7,4)
BYTE
REAL
GROUP
我应该如何将这些类型映射到 SQL Server 类型?
对我DECIMAL
来说只是直接命中,但我什至对此都不太放心。
为什么我这么困惑是因为我找不到对应的类型DATE
。
子问题是,Clarion 如何在表中保存日期?
我想加快以下代码
delete from ssn_sdo
where
(art_id=@art_id and skl_id=@skl_id and @level=0 )
or (art_id=@art_id and skl_id=@skl_id and @level=1 and tip=@tip)
or (art_id=@art_id and skl_id=@skl_id and doc_id = @doc_id)
我的服务器是 MS SQL-Server 2005。
art_id
,skl_id
和doc_id
是整数,而 tip 是varchar(10)
类型。
我想在ssn_sdo
表上创建一个索引,这样删除速度会更快。
我正在考虑做的是制作三个索引,每个索引对应每种情况:
doc_id (ASC), art_id (ASC), skl_id (ASC)
skl_id (ASC), art_id (ASC), tip (ASC)
skl_id (ASC), art_id (ASC),
或者是否有更好的方法来制作一个包含所有三种情况的索引。
我对索引很小心,因为我不想减慢在此表中的插入速度。
商业案例是。
1) 用户在纸上打印文档
2) 用户将打印的纸带给老板,老板在纸上唱歌
3) 然后用户去管理员那里对该纸进行数字签名。
我的任务是帮助管理员以简单的方式确保纸质文档和数字文档之间没有变化。
文档写在三个sql表中。
第一个表的完整性是字符串+日期
第二个表的完整性是组合 int+float
第三个表的完整性是 int+string。
这些表中还有其他列,可以在Boss sing document后自由更新,不需要Boss sing。
我的想法是从这三个表/组合中生成某种 SHA 或 CheckSum。在文档没有更改的情况下,这将是相同的。
我不希望我的校验和是无限的或太长,以便管理员可以轻松检查是否违反了我的自定义完整性。
我开始考虑我可以为 int - float make sum(int * folat)
对于每个字母的字符串我可以使用 ASCII 数字并做 sum(int * (ascii(S)+ascii(T)+ascii(I)+ascii (N)+ascii(G)))。
对于 date - int same make int * (date to int) 之后我可以将这三个数字相加(求和)并转换为十六进制。但也许我的数字将超出范围或太大而无法通过人眼进行比较。
我如何缩小超大数字以方便人类阅读和比较?有没有另一种方法可以确保我的受保护列在一段时间内没有变化?
我正在使用 MSSQL2005/8 服务器。我的报告引擎大部分是 rime SqlReportingServices,但我更喜欢在数据库级别而不是报告级别执行此登录。
我不想锁定文档的编辑,因为有时 Boss 会要求用户在签名前返回并更正文档。
我也不能逼老板拿鼠标在手。
通常我getdate()
在 where 子句中使用该函数来及时返回。就像是:
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,GETDATE())
如果我首先声明一个日期参数并在我的查询中使用它,SQL Server 2008R2 会执行更快的查询吗?
declare @dateNow date = getdate()
...
where
DOC.DATUM >= DATEADD(DD,-1*SSN_SDO.DANA_ZA_POVRAT,@dateNow )
有什么好的方法可以避免isnull()
在存储过程中多次编写函数吗?
我有一个使用该isnull()
函数几乎 30 次的存储过程,我认为我缺少一个概念,但在我找到更好的方法来获取我的数据之前,我会喜欢从这么多isnull()
函数中清理我的代码。
我可以将 SQL Server 2008 R2 设置为使用空值作为浮点 0 吗?isnull()
如果没有数据,我的大部分只是添加零 0 值,这样我就可以进行数学运算。
编辑:我并不懒惰,我只是想清理我的代码并避免选择部分看起来像这样
select
vrsta.NAZIV
,isnull(sum(prod.prod_mpci),0) as prod_MPCI
,isnull(sum(isnull(mal_MPCI,0) + (vel_kol * isnull(mal_MPC,vel_VPC))),0) as lager_mpci
,isnull(sum(vel_NCI),0)+isnulL(sum(mal_NCI),0) as lager_nci
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_MPC,vel_VPC)
else 0 end
) as visak_MPC
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_NC,vel_NC)
else 0 end
) as visak_MPC
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) <= isnull(prod.prod_kol,0)
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_MPC,vel_VPC)
else 0 end
) as manjak_MPC
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) <= isnull(prod.prod_kol,0)
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_NC,vel_NC)
else 0 end
) as manjak_NC
有时我的存储过程看起来像
create procedure handle_data
@fk int,
@value varchar(10)
as
begin
if exists (select * from my_table where id = @fk)
begin
update my_table
set value = @value
where id = @fk
end
else
begin
insert into my_table (fk, value)
select @fk, @value
end
end
调用此存储过程的应用程序设计可能存在错误。
我是否应该避免制作执行相同存储过程和插入新数据以及更新旧数据的方法的应用程序?
有没有更好的方法来以一种方法实现更新或插入数据?
我正在使用 SQL Server 2005 / 2008。
在 SQL Server 2008 R2 中,我有一个看起来像的查询
create stored procedure give_me_art @filter varchar(15),@skl_id int
begin
select
id,naziv,sifra,isnull(lager.kolicina,0) as lager
from art
left outer join lager on art.id=lager.art_id and lager.skl_id=@skl_id
where sifra like '%'+@filter+'%' or naziv like '%'+@filter+'
end
我在列 naziv 和列 sifra 上有一个索引。
我正在考虑将此查询更改为全文搜索。表艺术有大约 150K 条记录,我的主要目标是从 SQL Server 获得更快的响应,因为这种查询在日常工作中很常见。
如果我在这两列上创建全文索引并重新设计我的查询以使用全文索引,这个查询的性能会发生什么变化?
是否可以在 SQL Server 2005 和 SQL Azure 数据库之间设置过渡复制?
我的服务器快要报废了,我宁愿迁移到云基础架构,也不愿购买新硬件。
我一直无法找到任何说明 SQL Azure 数据同步是否可以与 SQL Server 复制共存的文档。
按百分比范围对记录进行分组的更简单方法是什么。
这是我试图完成的
Select top percents between 50 and 75 * from myTable order by PKI
这是我这样做的方法,但我觉得云要容易得多
select
top(25) percent
*
from myTable
where id not in (
select
top(25) percent
ID
from myTable
order by PKI
)
order by PKI
这应该是我表格的前 50-75%?
有没有更好(更好)的方法来做到这一点。
我在两个 SQL Server 之间进行事务复制。出于测试目的,我删除了订阅者的许多记录,这些记录仍然存在于发布者。
我现在知道,如果有人在发布者处更新或删除了一些记录,而这些记录在我的订阅者上不存在,那么我的复制就会崩溃。
我知道我也可以在分发服务器上过滤数据,但这意味着要重新初始化我的订阅者,这意味着要通过慢速链接传输近 40GB 的数据。
因此,在我测试订阅的数据库时,我希望限制用户只能在发布者端更新或删除记录。我的源表有一个日期字段,我想根据日期限制更新或删除。
为此使用触发器或约束更好吗?
如何尽可能避免记录锁定?
我的任务是根据时间戳(日期时间)值的最后一个(最大值)查找整数值。
因为它是如此复杂的查询,所以我正在考虑这种方式来找到类似这样的最后一个值
伪代码:
update my_table
set value=last_value
from my_table
inner join (
select *
from (
select top(100) percent
from
( select ts,last_value,pk_v from tb1
union all
select ts,last_value,pk_v from tb2
..
) as temp
order by ts
) as temp_order
) as temp on my_table.pk_v=temp.pk_v
这个想法是制作按时间戳排序的子查询,然后更新表。
在这种情况下,有时会在子查询中为一个 pk_val(primary_key 值)提供更多值。
对我来说,现在看起来这是不可能的,我正在考虑在 CURSOR 中进行更新。但在我继续之前,我很想听听你选择这个。
更清晰的问题是:在一个事务(选择)SQL 中更新如何工作需要两次更新同一行?
*编辑:1 * 这是带有数据的示例
create table #Table_To_update
(pk int not null,last_value int)
insert into #Table_To_update
select 1,null
union all
select 2,null
union all
select 3,null
create table #table_as_sub_query
(fk int, value int ,ts datetime)
insert into #table_as_sub_query
select 1,5,'2012-01-01'
union all
select 1,6,'2012-03-01'
union all
select 1,2,'2012-04-01'
union all
select 2,7,'2012-02-01'
union all
select 2,8,'2012-02-05'
union all
select 2,6,'2012-04-01'
union all
select 3,0,'2012-01-01'
union all
select 3,9,'2012-05-05'
union all
select 3,12,'2012-01-01'
/*--This Way I want to update new table with last values --*/
update #Table_To_update
set last_value=table2.value
from #Table_To_update table1
inner join (select
top(100) percent
*
from #table_as_sub_query
order by ts desc
) as table2 on table1.pk=table2.fk
我正在制作一项需要保存按年月组合分组和计算的数据的服务。我知道如何计算数据并将其放在新表上。但是我很困惑应该使用哪种数据类型来存储月 - 年值。这是我考虑过的。
我应该选哪个?还是有其他解决方案。有人可以根据性能建议哪种方式是好的解决方案,因为大多数查询将使用解决方案中的数据范围,而我的新表将有大约 2-5 百万条记录。
表值参数是否可以用作存储过程的输出参数?
这是我想在代码中做的事情
/*First I create MY type */
CREATE TYPE typ_test AS TABLE
(
id int not null
,name varchar(50) not null
,value varchar(50) not null
PRIMARY KEY (id)
)
GO
--Now I want to create stored procedu whic is going to send output type I created,
--But it looks like it is inpossible, at least in SQL2008
create PROCEDURE [dbo].sp_test
@od datetime
,@do datetime
,@poruka varchar(Max) output
,@iznos money output
,@racun_stavke dbo.typ_test READONLY --Can I Change READONLY with OUTPUT ?
AS
BEGIN
SET NOCOUNT ON;
/*FILL MY OUTPUT PARAMS AS I LIKE */
end
我需要在数据库中找到所谓的第一个条目,以查找有关其合作伙伴的项目。我写了查询,它给了我正确的结果,但性能很差。
我怀疑我错过了受孕,因此这个查询可以写得更好。所以我请求你帮我重新设计这个查询以获得更好的性能。
我运行的数据库系统是Sql Server 2008
declare @od_datuma datetime
declare @do_datuma datetime
set @od_datuma='2011-12-01'
set @do_datuma='2011-12-31'
select
doc.PAR_ID
,sdo.art_id
,MIN(doc.id) as doc_id
from
dokumenti
inner join DOC on dokumenti.tip=DOC.TIP
inner join SDO on DOC.ID=SDO.DOC_ID
left outer join (
select par_id,art_id from dokumenti
inner join DOC on dokumenti.tip=DOC.TIP
inner join SDO on DOC.ID=SDO.DOC_ID
where dokumenti.NABAVA =1 and
dokumenti.KOL_UL=1 and
DOC.DATUM<@od_datuma
) as stari_uazi on DOC.PAR_ID=stari_uazi.PAR_ID and SDO.ART_ID=stari_uazi.ART_ID
where
dokumenti.NABAVA =1 and
dokumenti.KOL_UL=1 and
stari_uazi.ART_ID is null and
doc.datum between @od_datuma and @do_datuma
group by doc.PAR_ID,sdo.art_id