SQL Server输出Clause到标量变量

时间:2011-04-05 21:11:40

标签: sql-server tsql

是否有任何“简单”方法可以执行此操作,或者我需要使用“OUTPUT ... INTO”语法传递表变量?

DECLARE @someInt int

INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)

3 个答案:

答案 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