小编ype*_*eᵀᴹ的帖子

CTE 错误(nvarchar 到数字)

我正在使用 CTE 将 SSRS 存储的 proc 转换为 BO 存储的 proc,因为显然我不能将临时表与 Business Objects 一起使用。

我有这个查询:

;WITH cte1
AS
( 
    SELECT  cv.issue  
          , cv.customfield  
          , CAST(STRINGVALUE AS NUMERIC) AS priority_num  
    --INTO    #temp_priority_val  
    FROM    proddb1.customfieldvalue cv WITH (NOLOCK)  
            INNER JOIN proddb1.customfield e WITH (NOLOCK)
                 ON  cv.CUSTOMFIELD = e.id 
                 AND e.cfname = 'Issue Priority')  

,cte2
AS
( 
    SELECT  a.ISSUE  
          , f.customvalue priority_num  
    --INTO    #temp_priority  
    FROM    cte1 a 
            INNER JOIN proddb1.customfieldoption f WITH (NOLOCK)
                 ON  a.CUSTOMFIELD = f.CUSTOMFIELD        
                 AND CAST(a.priority_num AS NUMERIC) = f.id) 

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server cte

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

在 Windows 上使用 pg_upgrade 升级失败

按照PostgreSQL 9.3.4 文档中关于pg_upgrade的升级过程从 postgres 9.2 升级到 9.3 时,以下命令失败:

RUNAS /USER:postgres "CMD.EXE"
Run Code Online (Sandbox Code Playgroud)

经过一番调查,机器上似乎没有 postgres windows 用户。这pg_upgrade也会导致命令失败。

我应该如何运行升级过程?

postgresql windows upgrade postgresql-9.2 postgresql-9.3

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

日期时间列与日期 + 时间列

我正在为一个保存大量日志的系统设计一个表。我们正在查看每秒大约 200 个条目。

我们使用的是 SQL-Server 2012 企业版。

我有一个关于将一Datetime列分成两列的问题,Date并且Time.

我在问题背后的想法。我会说一旦数据存储在数据库中,大多数搜索将基于每天,给我今天/1 月 10 日的所有结果。

现在我仍然需要存储时间。因此,如果我将其存储为datetime,则在执行此查询时,sql 将不得不加载整个datetime字段,然后只查看一半的数据。

因此,通过可能将日期存储在其自己的字段中,它可以只查看它需要的内容。

但另一方面,如果您确实在查询中指定了时间,则它现在必须检查两列的值。

因此,我希望 SQL Gurus 提供关于哪个选项对大型数据库的查询具有更好的性能的输入。

据我所知datetime,可以高度优化并且是比分解更好的解决方案。

sql-server t-sql sql-server-2012 datetime date

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

在 sql server 2008R2 中错误更新语句后如何回滚?

select * from aa

update aa set City='chennai',LastName='vinoth';

ID  FirstName  LastName  City
29  Abcrdrr    vinoth    chennai
1   John       vinoth    chennai
2   Joe        vinoth    chennai
35  raja       vinoth    chennai
38  Johsdfgn   vinoth    chennai
Run Code Online (Sandbox Code Playgroud)

我错误地更新Lastname, City了所有行中的列。现在我想回滚到旧的表行。

使用 SQL Server 2008R2。

sql-server sql-server-2008-r2

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

将表格转换为第三范式

我有一个这样的表:L(A, B, C, D, E)功能依赖项是:

AB -> CDE 
C -> D 
D -> B 
D -> E 
Run Code Online (Sandbox Code Playgroud)

我需要将此表转换为 3NF。我认为它甚至不在 2NF 中。我找到了 3 个候选键:

  1. 第一个显然是 AB
  2. D->B我们可以更改AB->CDEAD->BCE. 所以另一个候选键是AD
  3. 使用类似的逻辑,我们得到另一个密钥 AC

(我不确定我这样做是否正确)。

D -> E(我认为有更多类似的依赖项)我假设该表不在 2NF 中。拆分此表以获得 3NF 的正确方法是什么?

normalization relational-theory

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

在文件流容器之间移动内容

我有一台运行 SQL Server 2012 的服务器,在一个表上有多个 Filestream 容器。

我需要通过创建一个新的文件流容器并移动数据来将现有的文件流容器之一拆分为两部分。

如何在文件流容器之间可靠地移动内容?

我将第一个容器设置为不再增长,但是如何在不写入全新表的情况下将文件移动到另一个容器?有没有办法做一个UPDATE会导致 SQL Server 再次将文件写入磁盘的语句?- 我曾想过附加一个额外的数据字节,然后将其删除,以使 SQL Server 将内容作为新文件写入,但有更好的方法吗?

sql-server sql-server-2012 filestream

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

多对一复制/事务复制

我在不同的地理位置(本地站点)有几个 PostgreSQL 数据库。

  • 每个本地站点 DB 都具有相同的架构,但具有唯一的数据。例如,以包含以下列的表为例:Site_ID、Department_ID、Department_Name。Site_ID 对于每个站点都是唯一的。

  • 我想将本地站点数据库中的所有数据收集到充当数据仓库的集中式数据库(再次是 PostgreSQL)中。

  • 集中式数据库上的相应示例表将具有与上述相同的列。所有本地站点数据都将进入此表。当然,每个站点数据由 Site_ID 指定。

问题:如何使用PostgreSQL 复制方法(流/多主 UDR/BDR/等)实现这一点。我看到这可以通过 SQLServer 使用Transactional Replication来完成。使用 PostgreSQL 实现此功能的最佳方法是什么?

限制:本地站点只能进行传出网络连接(即由于防火墙限制不能进行入站连接)

postgresql replication transactional-replication multi-master

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

自定义 ID 编号 - 插入的快速方法?

首先:这是用于序列化的 ETL 存储过程,因此并行性无关紧要。

我需要在加载期间为标记分配自定义 ID 号。我不能使用身份字段,因为 ID 号是唯一的“桶号” - 本质上是另一个编号字段。

我目前使用以下代码:

DECLARE @idRunner smallint
SELECT @idRunner = ISNULL(MAX([Id]),0)
    FROM sim.[Variable]
    WHERE [BucketRef] = @simBucketNo

DECLARE variable_cursor CURSOR FOR
    SELECT DISTINCT p.[Variable]
        FROM simstg.[Parameter] p
        LEFT OUTER JOIN sim.[Variable] v ON (p.[Variable] = v.[Code])
        WHERE p.[BucketRef] = @stgBucketNo
            AND v.BucketRef = @simBucketNo
            AND v.Code IS NULL
OPEN variable_cursor
DECLARE @variable VARCHAR(64)

FETCH NEXT FROM variable_cursor INTO @variable
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @idRunner = @idRunner + 1
    INSERT INTO sim.[Variable] …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2014

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

为什么我的查询一起运行比单独运行时花费的时间更长?

我有一系列遵循一般模式的更新语句:一次更新聚合来自另一个表(或有时是多个表)的值,下一次更新根据聚合值生成排名。对于总共 46 个更新语句,此过程重复 23 次。每个更新对独立运行需要 30-40 秒,但是当我通过 PgAdmin 将它们作为单个事务一起运行时,它需要一个多小时,而不是我期望的基于单个查询时间的约 15 分钟。(上次尝试时,我最终停止执行并单独运行它们。)

如果我通过 psql 在文件中运行相同的更新集,则该过程将在预期的 15 分钟时间内完成。

查询计划器是否有一些怪癖会根据在单个事务中运行的大量更新语句来更改执行计划?鉴于 psql 和 PgAdmin 之间的不同行为,我认为这与查询打包执行的方式有关,但我不太熟悉,无法了解其中的区别。

有没有办法编写我的代码,以便在通过 PgAdmin 作为单个事务运行时提高性能?

我在 Ubuntu 16.04 上使用 PostgreSQL 9.5。

以下是代码中的两个示例对联:

-- bike_driver_aggressive
UPDATE  generated.crash_aggregates
SET     bike_driver_aggressive = (
            SELECT  COUNT(*)
            FROM    crashes_bike2 c
            WHERE   c.int_id = crash_aggregates.int_id
            AND     c.aggressive_driverfault
        );
WITH ranks AS (
    SELECT  int_id,
            rank() OVER (ORDER BY bike_driver_aggressive DESC) AS rank
    FROM    crash_aggregates
)
UPDATE  generated.crash_aggregates
SET     bike_driver_aggressive_rank = ranks.rank
FROM    ranks
WHERE   crash_aggregates.int_id = ranks.int_id; …
Run Code Online (Sandbox Code Playgroud)

postgresql pgadmin execution-plan postgresql-9.5

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

获取汇总行的 ID

我有以下查询来获取与最新日期对应的值:

SELECT MAX(RowAddedDate), X, Y
FROM dbo.MyTable
GROUP BY X, Y
Run Code Online (Sandbox Code Playgroud)

这很好,但我需要获取此查询中每一行的 ID。如果我添加 ID,我会得到所有内容,因为 ID 需要在GROUP BY.

我该如何解决这个问题?

sql-server aggregate t-sql greatest-n-per-group

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