标签: sql-server-2014

无法从选择查询的结果中复制包含 JSON 数据的大列

TreeVersions在 SQL Server 中有一张表,其中有一JSONTree列包含大型树 JSON 数据。

现在我已经运行了select JSONTree from dbo.TreeVersions where Tree_Id=1,我得到了树 1 的结果。但是当我JSONTree从结果中复制列时,它并没有得到完整的结果。

谁能告诉我需要什么查询才能获得完整结果,或者我需要做什么才能获得此列的完整数据?谢谢!

sql-server ssms sql-server-2014

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

SQL Server 错误:“BETWEEN ... FOLLOWING AND CURRENT ROW”不是有效的窗口框架,不能与 OVER 子句一起使用。

我正在尝试将 3 个月的净值与 1 个月的净值相加。代码

SELECT [CMONTH]
      ,[ID]
      ,[NET_VALUE_1M]
      ,SUM(CAST([NET_VALUE_1M] as float)) OVER 
          (PARTITION BY [ID] ORDER BY [CMONTH] 
             ROWS BETWEEN 3 FOLLOWING AND CURRENT ROW) as 'NET_VALUE_3M'   
  FROM [Channel_AGG]
Run Code Online (Sandbox Code Playgroud)

正在引发错误

Msg 4193, Level 16, State 4, Line 2
'BETWEEN ... FOLLOWING AND CURRENT ROW' is not a valid window frame 
and cannot be used with the OVER clause.
Run Code Online (Sandbox Code Playgroud)

为什么会这样,是什么原因造成的以及如何解决?

sql-server sql-server-2014

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

什么时候可以将varchar加入nvarchar

我需要了解varchar和nvarchar之间的连接何时起作用以及何时不起作用.

简要背景:我们将把许多varchar列更改为nvarchar列.我们还有数十个SSRS报告,总共有100个查询.我需要评估变更的风险 - 希望避免过度测试.

(我确实认识到,首先不应该在varchar列上进行连接,但是对于不同的日子来说这是一个不同的问题...)

我曾经传闻过varchar到nvarcher连接的问题,使用COLLATE DATABASE_DEFAULT解决问题,但我似乎无法通过两种数据类型之间的简单连接重新创建这些问题.

这种不匹配何时会导致问题?

sql-server sql-server-2014

3
推荐指数
1
解决办法
4807
查看次数

哪个ETL起点是SQL Server集成最简单,最有效的?

我是ETL世界的新手,我正在尝试安排从另一家公司发送给我们的数据文件,以便它可以ETLed到数据仓库.我将通过SQL Server 2014上的Integration Services开发ETL.基本上,我有五种类型的记录:帐户记录(与个人帐户相关的元记录),购买记录等.

为方便起见,帐户记录只提供有关帐户持有人的信息(姓名,帐户ID,性别等),购买记录显示购买历史及其金额等

我的问题是:向我们发送记录的公司问我:你想如何安排记录?

  1. 多标题/预告片:每个标题指示我们获取的记录类型(header1将为Account)
  2. 多个文件(每种类型的记录都在一个单独的文件中)
  3. 提及跟随他的记录的人.

例如:

Person X
Account Records....
Purchase Records...
... 
Person Y
Account Records....
Purchase Records...
Run Code Online (Sandbox Code Playgroud)

sql-server ssis etl sql-server-2014

3
推荐指数
1
解决办法
72
查看次数

C#和SQL Server - 使用存储过程"一次性"删除多行的最佳方法

我知道那里所以这里的许多相同经历的问题,我的问题是,如果我想删除说1K左右行相当少,给出List<int>RecordID,我会避免使用DataTable,并发送翻译成语句列表:

string ParmRecordsToDelete_CsvWhereIN = "("
for(int CurIdx=0; CurIdx < RecIdsToDelete.Count; CurIdx++)
{
  ParmRecordsToDelete_CsvWhereIN += RecIdsToDelete[CurIdx] + ", ";
  //this method to create passed parameter 
  //logic to remove on last Coma on last Index..

  //or use stringJoin and somehow remove the last coma 
}
ParRecordsToDelete_CsvWhereIN +=")";
Run Code Online (Sandbox Code Playgroud)

这将创建像"('1','2','3'......)"

然后创建一个SqlCommand调用存储过程:

Delete * From @TblName WHERE @ColName IN @RecordsToDeleteCsvWhereIN
Run Code Online (Sandbox Code Playgroud)

这是一种有效的方法吗?单个参数的长度是否有限制?我猜这是N/VARCHAR(MAX)长度.

我想如果它不是一个有点hackish解决方案它不会受到长度的限制......

什么是最好的快速解决方案,还是我在正确的轨道上?

c# performance sql-server-2012 sql-server-2014

3
推荐指数
1
解决办法
6370
查看次数

在TSQL-Merge中匹配条件时更新和插入

我一直在尝试编写一个存储过程,我可以使用Merge和以下条件执行UpSert

  1. 如果记录存在,则将目标的EndDate更改为昨天的日期,即当前日期 - 1

  2. 如果Record不存在,则插入新记录

这是我在SP中使用的表tblEmployee

CREATE TABLE tblEmployee
(
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [varchar](10) NOT NULL,  
    [StartDate] [date] NOT NULL,
    [EndDate] [date] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这是我的SP,它将UDTT作为输入参数

CREATE PROCEDURE [dbo].[usp_UpsertEmployees]
@typeEmployee typeEmployee READONLY -- It has same column like tblEmployye except EmployeeID
AS
BEGIN
    SET NOCOUNT ON;      

    MERGE INTO tblEmployee AS TARGET
    USING @typeEmployee AS SOURCE
    ON TARGET.Name = SOURCE.Name 

    WHEN MATCHED and TARGET.StartDate < SOURCE.StartDate
    THEN 

            --First Update Existing Record EndDate to Previous Date as shown below …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-merge sql-server-2014

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

SQL服务器就像Group By任务一样

我有一个SQL服务器表,如下所示,

Date        Value
---------------------------------------------------
08-01-2016    1
08-02-2016    1
08-03-2016    1
08-04-2016    1
08-05-2016    1
08-06-2016    2
08-07-2016    2
08-08-2016    2
08-09-2016    2.5
08-10-2016    1
08-11-2016    1
Run Code Online (Sandbox Code Playgroud)

由于原始表太大,即使我使用"结果文件",它仍然会引发异常'System.OutOfMemoryException'.这就是为什么我要把这个表组织成这种方式.

但我没有一个好的逻辑来处理.因此,我想将表格改为如下所示.

Date_from      Date_to      Value
-------------------------------------------------
08-01-2016     08-05-2016   1
08-06-2016     08-08-2016   2
08-09-2016     08-09-2016   2.5
08-10-2016     08-11-2016   1
Run Code Online (Sandbox Code Playgroud)

我感谢你的想法!

sql sql-server sql-server-2014

3
推荐指数
1
解决办法
102
查看次数

SQL Server - 定义中的视图名称与实际视图名称不同

我在SQL服务器上遇到了一个奇怪的问题.我在db中有一个名为"SPH_F2V_VEB_FIN-04-GLA-07 - 反转和取消GL发布"的视图,但是当运行以下查询时,我得到了一个名称已更改的定义.

SELECT object_definition (OBJECT_ID(N'dbo.SPH_F2V_VEB_FIN-04-GLA-07 - Reversed and Cancelled GL Postings'))
Run Code Online (Sandbox Code Playgroud)

输出:

CREATE VIEW [dbo].[SPH_F2V_VEB_FIN-04-GLA-07 - Reversed & Cancelled GL Postings] AS

SELECT 
    --GL1.[Business Unit],
    GL1.[Company Code],
    GL1.Description,
....
Run Code Online (Sandbox Code Playgroud)

如果您注意到,名称更改为"SPH_F2V_VEB_FIN-04-GLA-07 - 已撤消和取消GL过帐",将"和"更改为"&".起初它似乎是一个sql转换问题或与"和"相关的东西,但我用"和""&"尝试了几个视图,它们似乎按预期工作.

那么,这有可能发生什么?我甚至对DB如何允许这一点持怀疑态度.任何想法都会深深感激!!

sql sql-server sql-server-2014

3
推荐指数
1
解决办法
89
查看次数

如何以最早的日期返回记录?

我需要为每个不同的学生ID返回第一条记录.在我的示例代码中,我有一条记录在同一天有两个事件,另一个学生在不同日期有多个事件.

我需要选择最早的日期,如果在同一天发生了多个日期,那么最早的事件ID将作为下一个标准.这样做的好方法是什么?

我在这个数据集中有大约35列,但为了简洁,仅包括下面的前5列.

数据:

数据图片

期望的结果:

期望结果的图片

示例代码如下.

  CREATE TABLE #TEMP (
  StudentID float,
  SchoolID float,
  StudentNameFull nvarchar(255),
  IncidentID float,
  IncidentDate date
  )

  INSERT INTO #TEMP (StudentID, SchoolID, StudentNameFull, IncidentID, IncidentDate)
  VALUES 
  (1111111, 406, 'Smith,John', 123321, '20170501'),
  (1111111, 406, 'Smith,John', 123322, '20170501'),
  (2222222, 406, 'Jones,Tim',  654789, '20170501'),
  (2222222, 406, 'Jones,Tim',  659872, '20170503'),
  (2222222, 406, 'Jones,Tim',  478978, '20170508')

  SELECT * FROM #TEMP
Run Code Online (Sandbox Code Playgroud)

谢谢.

sql t-sql sql-server sql-server-2014

3
推荐指数
2
解决办法
113
查看次数

在哪里和哪里没有SELECT

我如何在同一个SELECT SQL查询中使用WHERE和WHERE NOT?

例如,我可以有一个名为fruits的表.

ID | Name       | Colour
-------------------------
1  | Strawberry | Red 
2  | Apple      | Red
3  | Grape      | Red
4  | Banana     | Yellow
Run Code Online (Sandbox Code Playgroud)

从这个表中,我可以执行一个SELECT * FROM [fruits] WHERE Colour = 'Red',它将检索以下内容:

ID | Name       | Colour
-------------------------
1  | Strawberry | Red 
2  | Apple      | Red
3  | Grape      | Red
Run Code Online (Sandbox Code Playgroud)

但是,我想Apple从上面的单个请求中排除,我可以使用一个WHERE NOT,但这将返回所有水果,包括Banana.

我将如何编写SQL查询,以便产生以下结果,选择特定的颜色,但不包括特定的水果:

ID | Name       | Colour
-------------------------
1  | Strawberry | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2014

3
推荐指数
1
解决办法
2883
查看次数