如何在sql中使用数组

时间:2014-03-12 12:03:20

标签: sql sql-server sql-server-2008

我有一个select语句,其中可能返回多个值。所以我想将所选的值存储在一个表类型的数组中,因为在sql中没有数组的概念,并且也使用相同的存储值。我的选择查询如下:

    if exists(
         Select StartDate,EndDate 
         FROM Reservations1  
         where (DateAdd(day,0,StartDate) >= @StartDate)
         and (DateAdd(day,0,EndDate) <= @EndDate) 
         and Requestid in
             (Select RequestId from RequestModelMap1 
              where ModelSerialNumber=@ModelSerialNumber)
         )

如果它返回一些值,那么我想存储它。

4 个答案:

答案 0 :(得分:1)

一些伪SQL,因为我不确定您使用的是什么数据库系统:

-- create a table to store results
CREATE TABLE SelectedDates
(
  StartDate DATETIME,
  EndDate DATETIME
);


-- empty it
TRUNCATE TABLE SelectedDates

-- insert data
INSERT INTO SelectedDates (StartDate, EndDate)
    Select StartDate,EndDate 
     FROM Reservations1  
     where (DateAdd(day,0,StartDate) >= @StartDate)
     and (DateAdd(day,0,EndDate) <= @EndDate) 
     and Requestid in
         (Select RequestId from RequestModelMap1 
          where ModelSerialNumber=@ModelSerialNumber)

答案 1 :(得分:1)

取决于&#34;数组&#34;的大小。您可能只想将其存储在table variable中。我存储在表变量中的较小集合,但是更大的集合存储在临时表中。

DECLARE @MyDateArray TABLE
    (
     StartDate DATETIME
    ,EndDate DATETIME
    )

INSERT INTO @MyDateArray
        ( StartDate
        ,EndDate
        )
        SELECT StartDate
               ,EndDate
            FROM Reservations1
            WHERE ( DATEADD(day, 0, StartDate) >= @StartDate )
                AND ( DATEADD(day, 0, EndDate) <= @EndDate )
                AND Requestid IN ( SELECT RequestId
                                    FROM RequestModelMap1
                                    WHERE ModelSerialNumber = @ModelSerialNumber )

SELECT *
FROM @MyDateArray

答案 2 :(得分:0)

如果要暂时存储值,可以选择临时表,例如......

     Select StartDate,EndDate 
     INTO #temp
     FROM Reservations1  
     where (DateAdd(day,0,StartDate) >= @StartDate)
     and (DateAdd(day,0,EndDate) <= @EndDate) 
     and Requestid in
         (Select RequestId from RequestModelMap1 
          where ModelSerialNumber=@ModelSerialNumber)
     )

     --Show that values have been stored...
     SELECT * FROM #temp

然而,这可能不是您所需要的 - 或者最好的方式。你的问题需要更多细节...

答案 3 :(得分:0)

声明表变量

Declare @temp Table
(
 startdate datetime,
 enddate datetime
)

表变量在仅运行的脚本的持续时间内处于活动状态