我在存储过程中有一个 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) 我需要将几乎重复的行插入表中,同时更改一些值。
例如,插入具有新 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)
有办法做到吗?
我正在尝试在表变量上创建索引,这可能吗?
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) 我正在尝试使用“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 机器。这是怎么回事,我该如何解决?
我有一张开始时间和结束时间的表。我需要以分钟为单位生成这两个日期之间的间隔表。以下是一些示例数据:
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个分钟为增量。
我正在尝试编写一个存储过程,它接受一个字符串参数并返回它,每个字符用句号分隔.
所以例如我希望SP接受参数DOG并返回DOG
我试过使用STRING_SPLIT函数如下:
select STRING_SPLIT(@myString, '')
Run Code Online (Sandbox Code Playgroud)
但它似乎与我正在使用的SQL版本(2014)不兼容(错误消息表明它不是一个公认的功能).即使它确实有效,我也不确定如何插入句号.
似乎应该有一个简单的方法来做到这一点但我找不到它!
如果您需要任何进一步的信息,请告诉我.
非常感谢.
我是 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)
这是我的存储过程中的代码。
我想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在数据库中创建此列时使用了数据类型。
我有一个软件可以检查每台工厂机器并生成大约 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 脚本,呈现,然后将发送回用户。
非常感谢。
当前数据:
|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-server-2014 ×10
sql-server ×8
sql ×6
t-sql ×2
bcp ×1
c# ×1
duplicates ×1
hibernate ×1
insert ×1
java ×1
sql-update ×1
sqlcmd ×1