选择并插入一个语句

时间:2015-03-16 19:29:43

标签: sql sql-server

INSERT INTO #Temp2 (RowNumber, ValFromFunc, FuncWeight, percentage)
   SELECT 
       RowNumber, PercentMatch, @constVal, PercentMatch * @constVal
   FROM 
       dbo.MatchDate(@Date)

dbo.MatchDate(@date)是一个内联TVF,如下所示:

CREATE FUNCTION [dbo].[MatchDate] (@DateFromUser nvarchar(20))
    RETURNS TABLE AS RETURN
    SELECT 
        p.Rowid AS RowNumber , 
        CAST(100 AS INT) AS PercentMatch 
    FROM 
        dbo.Patients p
    WHERE 
        datename(day, p.DOB) = @DateFromUser

GO

我有这个查询,我在一个查询中选择和插入。现在我有一个扩展的要求,需要我检查ModifiedAt dbo.MatchDate(@Date)返回的行,并且仅当#Temp2返回的行大于某个时间T时才插入ModifiedAt

如何在上述查询中执行此操作?

2 个答案:

答案 0 :(得分:1)

只需在select语句中放置一个where子句(假设您的表值函数返回一个名为ModifiedAt的列)

INSERT INTO #Temp2 (RowNumber, ValFromFunc, FuncWeight, percentage)
   SELECT 
       RowNumber, PercentMatch, @constVal, PercentMatch * @constVal
   FROM 
       dbo.MatchDate(@Date) where ModifiedAt > @T

答案 1 :(得分:1)

您可以在您的功能中添加修改日期但仅在适当的情况下添加修改日期,如果您只是为了方便起见,请不要添加它。

如果您选择该路线,那么您的查询应该只是

INSERT INTO #Temp2 (RowNumber, ValFromFunc, FuncWeight, percentage)
   SELECT 
       RowNumber, PercentMatch, @constVal, PercentMatch * @constVal
   FROM 
       dbo.MatchDate(@Date)
   WHERE 
       ModifiedAt > @YourComparisonDateTime

但是,您不一定需要添加ModifiedAt,因为您仍然可以对表值函数执行连接。

INSERT INTO #Temp2 (RowNumber, ValFromFunc, FuncWeight, percentage)
   SELECT 
       f.RowNumber, f.PercentMatch, @constVal, f.PercentMatch * @constVal
   FROM 
       dbo.MatchDate(@Date) f
       inner join YourSourceTable t
          on f.RowNumber = t.RowNumber --t.RowNumber being the identity or PK column that matches f.RowNumber
          -- and any other required join conditions
   WHERE
       t.ModifiedAt > @YourComparisonDateTime

我在这里做了很多假设,所以你需要填写空白或提供更多信息。

希望能帮到你。

修改

INSERT INTO #Temp2 (RowNumber, ValFromFunc, FuncWeight, percentage)
SELECT 
    f.RowNumber, f.PercentMatch, @constVal, f.PercentMatch * @constVal
FROM 
    dbo.MatchDate(@Date) f
    inner join Patients p
        on f.RowNumber = p.RowID
    inner join ResultsStored rs
        on rs.RowID = f.RowNumber
WHERE
    p.ModifiedAt > rs.ModifiedAt