【问题标题】:T-SQL Dynamic variable insertT-SQL 动态变量插入
【发布时间】:2014-11-12 15:51:39
【问题描述】:

有人可以帮忙,这个查询。我的临时表中有 10 行

Declare @date date = '2014-11-01'
Declare @iDate int = '20141101'
Create table #test33(Paname  varchar(100))
insert into #test33

Go

现在我在临时表中有 10 行。我想在我的 cte 中动态插入这些临时值

Declare @StartDate date = '2014-11-01'
Declare @EndDate date = '2014-11-30'
Declare @Paname   nvarchar(100) = 'MPU' --- i have  multiple panames how can i insert dyamically in cte or any other solution?



 ;with pla as
          (     SELECT*
          FROM  [dbo].[Pla] pl
                 JOIN dbo.testplan cl
                 ON pl.ClientId = cl.ClientId
                 where  pl.name = @Paname  
                 and pl.StartDate >= @StartDate and pl.EndDate <= @EndDate
                 ) 
   select * from pla

【问题讨论】:

  • 您不会在 CTE 上“插入”数据。我无法理解您在这里真正想要什么
  • 第一个代码块是怎么回事?您正在创建一个临时表,然后尝试从刚刚创建的临时表中选择临时表数据?第一个区块与第二个区块有什么关系?
  • 嗨 Lamak,我的临时表中有 10 个 Paname 行,而不是 10 次必须在 cte 变量中输入 paname 才能获得我的结果,我可以动态获得结果以逐个插入吗?
  • 嗨 Kritner,简而言之,我刚刚给出的第一个块,例如我在临时表中有一些行,我想将其动态插入到第二个代码块中的变量中,并且该变量名称是 Paname 谢谢

标签: sql sql-server stored-procedures dynamic-sql


【解决方案1】:

您可以使用 WHILE 或使用 CURSOR 循环抛出多个参数。在里面你可以使用动态sql:

declare @DSQL varchar(MAX)

SET @DSQL = ';with pla as
            (     SELECT*
                  FROM  [dbo].[Pla] pl
                  JOIN dbo.testplan cl
                  ON pl.ClientId = cl.ClientId
                  where  pl.name = '+@Paname+' 
                  and pl.StartDate >= '+@StartDate+' and pl.EndDate <= '+@EndDate+'
                  ) 
               select * from pla'
EXEC(@DSQL)

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2014-11-03
    • 2022-01-15
    • 1970-01-01
    • 2020-07-05
    • 2013-07-10
    • 2011-06-28
    • 2017-09-30
    相关资源
    最近更新 更多