我正在尝试编写一个存储过程来确定两次之间的秒数差异。如果我要对我知道可以使用的值进行硬编码
CAST(datediff(second, [start], [end])/3600.0 As Decimal(18,4)))
Run Code Online (Sandbox Code Playgroud)
但我只需要在满足条件的情况下才能获得差异。我的想法是做这样的事情
Declare @diff decimal(18,4)
Create Table #Dope
(
date1 datetime
,inlate decimal(16,4)
)
INSERT INTO #Dope (date1) Values
('2016-01-04 08:08:47.000'),
('2016-01-04 08:25:59.000'),
('2016-01-04 08:27:47.000'),
('2016-01-04 08:00:00.000')
if CAST(date1 As Time) > '08:00:00.000'
--Here is where the capture would come but I am unsure of how to type it
SET @diff = CAST(datediff(second, [], [date1])/3600.0 As Decimal(18,4))
Run Code Online (Sandbox Code Playgroud)
如何将 Set 语句中的第一个日期时间设置为我需要秒差的当天上午 8 点?意思是,我不能只是将 '08:00:00.000' 硬编码到我的 Set 语句中,因为这两个日期我是不同的,这会给我跨越几天的秒数,这不是我所追求的。我只想看看 date1 和 '08:00:00.000' 之间的秒数差异
我知道如何创建表类型(用作表值参数) - 但是一旦创建,我如何查看它?
我正在Insert Into
我的存储过程中运行一条语句,该语句正在从 a 接收数据Table Value Parameter
我刚刚意识到我需要在执行插入之前首先验证表中不存在数据,因此我试图将我的过程更改为此
ALTER PROC [dbo].[CMT]
(@TempTable AS dbo.TableValue_ET READONLY)
AS
BEGIN
if b.[empID] NOT IN (Select [empID] FROM [Habib].[dbo].[SE])
BEGIN
INSERT INTO [Habib].[dbo].[SE]([empID],[POD],[empNotes],[hiredate],[terminationdate],[terminationtime],[address],[city],[state])
SELECT
[empID]
,[POD]
,[empNotes]
,convert(varchar(10), [b].[hiredate], 101)
,convert(varchar(10), [b].[terminationdate], 101)
,[terminationtime] = LTRIM(RIGHT(CONVERT(VARCHAR(20), [b].[terminationdate], 100), 7))
,[address]
,[city]
,[state]
FROM @TempTable b
END
END
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试保存此更新的语法时,出现错误
消息 4104,级别 16,状态 1,过程 UpdateShippingExceptions,第 7 行
无法绑定多部分标识符“b.empID”。
我必须更改什么才能empID
在插入之前首先检查表中是否已经存在?