是否有任何“简单”方法可以执行此操作,或者我需要使用“OUTPUT ... INTO”语法传递表变量?
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
答案 0 :(得分:141)
你需要一个表变量,它可以很简单。
declare @ID table (ID int)
insert into MyTable2(ID)
output inserted.ID into @ID
values (1)
答案 1 :(得分:27)
一年之后......如果您需要的是获取表格的自动生成ID,您可以
SELECT @ReportOptionId = SCOPE_IDENTITY()
否则,您似乎无法使用表格。
答案 2 :(得分:1)
稍后,但仍然值得一提的是,您还可以使用变量在UPDATE的SET子句或SELECT的字段中输出值;
import math
import datetime
def xldate_to_datetime(xldatetime): #something like 43705.6158241088
tempDate = datetime.datetime(1899, 12, 31)
(days, portion) = math.modf(xldatetime)
deltaDays = datetime.timedelta(days=days)
#changing the variable name in the edit
secs = int(24 * 60 * 60 * portion)
detlaSeconds = datetime.timedelta(seconds=secs)
TheTime = (tempDate + deltaDays + detlaSeconds )
return TheTime.strftime("%Y-%m-%d %H:%M:%S")
xldate_to_datetime(43705.6158241088)
# 2019-08-29 14:46:47
在上面的示例中,@ val1具有before值,而@ val2具有after值,尽管我怀疑触发器的任何更改都不会在val2中进行,因此在这种情况下,您必须使用输出表。除了最简单的情况外,我认为输出表也将在您的代码中更具可读性。
一个非常有用的地方是如果您想将一列变成逗号分隔的列表;
DECLARE @val1 int;
DECLARE @val2 int;
UPDATE [dbo].[PortalCounters_TEST]
SET @val1 = NextNum, @val2 = NextNum = NextNum + 1
WHERE [Condition] = 'unique value'
SELECT @val1, @val2