标签: sql-server-2014

如何在 SQL Server 中的 UPDATE 查询的子查询中引用表变量

我在存储过程中有一个 UPDATE 查询,其中我需要更新一个已经由一些数据填充的表变量。这个查询,如下面的代码,由于在子查询中引用了表变量,即在子查询中@daysPerEmail.ProductId被引用而给出错误。我尝试为表变量使用别名,如 in UPDATE @daysPerEmail d SET LastEmailDate...,但它没有帮助。

问题:如何重写查询以便在子查询中正确引用 ProductId 的表变量列?

UPDATE @daysPerEmail SET LastEmailDate = (SELECT max(ActionDate) FROM 
        useractionsreport  WHERE ProductId = @daysPerEmail.ProductId 
       and ActionTypeId = @userActionTypeId );
Run Code Online (Sandbox Code Playgroud)

更新 1

为了在 SSMS 中重现这一点,我使用以下查询。SSMS 给出一个错误说Must declare the scalar variable "@daysPerEmail".

DECLARE @daysPerEmail TABLE (
    VendorId INT,
    DaysPerEmail SMALLINT,
    LastEmailDate DATE,
    ProductId INT 
)

INSERT INTO @daysPerEmail (VendorId, DaysPerEmail, LastEmailDate, ProductId)
    VALUES (10, 5, NULL, 11), (12, 3, NULL, 15), (14, 1, NULL, 22);

UPDATE …
Run Code Online (Sandbox Code Playgroud)

sql-server table-variable sql-update sql-server-2014

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

SQL Server:在使用 select * 更改某些值时重复表中的行

我需要将几乎重复的行插入表中,同时更改一些值。

例如,插入具有新 id 的重复行(我不需要自动 id)和不同的名称,但所有其他值相同。问题是我需要做出选择 *

我知道有一种方法可以通过这种方式插入选择和更改值:

insert into Table1(id,name,surname) select newid(),'David',surname from Table1 where id=1
Run Code Online (Sandbox Code Playgroud)

但我不想登记所有字段,而是想使用 select *,所以如果添加了字段,我将不必更改我的存储过程。

我想要类似的东西:

insert into Table1 (
   update (SELECT *
          FROM Table1
          WHERE  id= 1  ) t 
    set t.id= newid(),name='David')
Run Code Online (Sandbox Code Playgroud)

有办法做到吗?

sql t-sql insert insert-update sql-server-2014

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

在表变量上创建索引

我正在尝试在表变量上创建索引,这可能吗?

DECLARE @RDTABLE TABLE (TLCDE VARCHAR(12), TLTYP VARCHAR(2), TLEFFDAT DATETIME, TLRATFCT DECIMAL(29,6))

INSERT INTO  
    @RDTABLE
SELECT
    TLCDE
,   TLTYP
,   TLEFFDAT
,   TLRATFCT
FROM    
    BT_TR
WHERE
    TLTYP = 'TX'
Run Code Online (Sandbox Code Playgroud)

通常我会像这样创建索引:

CREATE NONCLUSTERED INDEX IX_RDTABLE ON RDTABLE ([TLTYP],[TLEFFDAT]) 
INCLUDE ([TLCDE],[TLRATFCT]) 
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2014

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

SQLCMD、BCP - 存储过程不存在

我正在尝试使用“Hello World”作为概念证明,sqlcmd但我很难:

在此处输入图片说明

命令:

 sqlcmd 'cmd.exe'
Run Code Online (Sandbox Code Playgroud)

错误:

找不到存储过程“sqlcmd”。

我在 BCP 上遇到了类似的问题:

 bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" 
Run Code Online (Sandbox Code Playgroud)

找不到存储过程“bcp”。

这是一台 SQL Server 2014 机器。这是怎么回事,我该如何解决?

sql-server bcp sqlcmd sql-server-2014

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

如何在 T-SQL 中生成两个日期之间的分钟间隔?

我有一张开始时间和结束时间的表。我需要以分钟为单位生成这两个日期之间的间隔表。以下是一些示例数据:

declare @intervalMinutes int = 10
declare @myDates table (
myId int primary key identity,
startTime datetime,
endTime datetime
)

insert @myDates (startTime, EndTime) values ('2016-07-10 08:00','2016-07-10 09:00')
insert @myDates (startTime, EndTime) values ('2016-07-12 10:00','2016-07-12 12:00')
insert @myDates (startTime, EndTime) values ('2016-07-14 12:30','2016-07-14 14:30')
Run Code Online (Sandbox Code Playgroud)

我想看到的是每个myId时间间隔的一组日期@intervalMinutes

所以,如果我们@intervalMinutes设置为10,那么我看到第一行之间的6个日期的列表2016-07-10 08:00,并2016-07-10 09:00在10个分钟为增量。

t-sql sql-server sql-server-2014

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

将字符串拆分为以句点分隔的字母(SQL)

我正在尝试编写一个存储过程,它接受一个字符串参数并返回它,每个字符用句号分隔.

所以例如我希望SP接受参数DOG并返回DOG

我试过使用STRING_SPLIT函数如下:

select STRING_SPLIT(@myString, '')
Run Code Online (Sandbox Code Playgroud)

但它似乎与我正在使用的SQL版本(2014)不兼容(错误消息表明它不是一个公认的功能).即使它确实有效,我也不确定如何插入句号.

似乎应该有一个简单的方法来做到这一点但我找不到它!

如果您需要任何进一步的信息,请告诉我.

非常感谢.

sql sql-server sql-server-2014

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

如何在 SQL Server 中将 NULL 插入 DATETIME coulmn 而不是 1900-01-01 00:00:00.000

我是 SQL Server 的新手,我正在尝试将日期插入到具有 DATETIMEas 数据类型。

当我将日期时间从 API 传递给存储过程时,它会插入我传递的值。但是如果我传递一个空字符串" ",它会插入一个默认值1900-01-01 00:00:00.000. 但我想插入,NULL如果数据是 " ".

我用谷歌搜索了很多,但找不到解决方案。

@DATEVAL1 DATETIME = '',
@DATEVAL1 DATETIME = ''

INSERT INTO TABLE (mDate1, mDate2)
VALUES (@DATEVAL1, @DATEVAL2);
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程中的代码。

sql sql-server sql-server-2014

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

在 sql server 中使用 UTC 时间保存当前日期的问题

我想UTC在 sql server 2014 中使用时区保存日期。我曾经ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("UTC"))使用 Hibernate 会话对象获取当前日期时间并将其持久化到 db。在调试时,我可以看到在 Java 程序中日期是这样的2019-09-25T13:22:29.573Z[UTC],但是在数据库列中保存后它是这样的2019-09-25 18:53:23.3630000。它会根据系统时间自动转换时间部分。任何人都可以请建议是什么问题?我datetime2在数据库中创建此列时使用了数据类型。

java hibernate sql-server-2014

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

在 SQL Server 中存储数百万个 100kb PDF

我有一个软件可以检查每台工厂机器并生成大约 100kb 的 PDF 输出。这是 12 小时的计划任务。我有超过 18.000 台机器,随着新工厂的建立,它会增加。我在一个月内大约获得了数百万条 PDF 文档记录。如果机器出现任何问题,我还需要使用过滤器选项向最终用户展示它们。

我在后端和 SQL Server 2014 中使用 C# ASP.NET。

存储它们的有效方法是什么?直接在数据库中使用 nvarbinary(max) 还是文件系统?

我打算使用文件服务器,但这个链接让我感到困惑,所以我想问一下。

-编辑-

在与我的经理讨论后,我们决定使用以下方法。感谢大家提出有用的意见,你贡献了很多。

我们将以文本格式将数据存储在有意义的表结构中。当最终用户想要 PDF 时,我们将创建 PDF 并及时提供。不会存储它们。我们还将对 PDF 中的图像使用 S3 CDN,并将其元数据保存在 DB 中。

当需要新的报告时,开发人员将首先从 db 获取模板,将使用报告编辑器实现详细信息,然后将此 xml 脚本与用户参数(语言、权限等)一起发送到我们基于 SOA(面向服务架构)的机制。我们的 SOA 引擎将评估请求,用正确的数据和语言填充 xml 脚本,呈现,然后将发送回用户。

非常感谢。

c# sql sql-server sql-server-2014

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

如果数据不同,则交替编号行

当前数据:

|LotNumber |ItemNumber |ItemName
|76        |1          |WidgetRight
|76        |1          |WidgetLeft
|76        |2          |WidgetRight
|76        |2          |WidgetLeft
|76        |7          |WidgetRight
|76        |7          |WidgetLeft
|76        |9          |WidgetRight
|76        |10         |WidgetRight
|76        |10         |WidgetLeft
|80        |3          |WidgetRight
|80        |3          |WidgetLeft
|80        |7          |WidgetRight
|80        |7          |WidgetLeft
|80        |11         |WidgetRight
|80        |31         |WidgetRight
Run Code Online (Sandbox Code Playgroud)

每次 ItemNumber 改变时需要添加一个在 1 和 2 之间交替的列

|LotNumber |ItemNumber |ItemName       |NewField
|76        |1          |WidgetRight    |1
|76        |1          |WidgetLeft     |1
|76        |2          |WidgetRight    |2
|76        |2          |WidgetLeft     |2
|76        |7          |WidgetRight    |1 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server duplicates gaps-and-islands sql-server-2014

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