存在的存储过程不引入子查询

时间:2013-10-15 12:40:02

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

我已经制作了一个存储过程,并在下面收到错误消息,不知道为什么。我一直在寻找一些答案,并在办公室与其他一些人在一起,但他们都不确定这个问题。希望有人在这里遇到同样的问题并知道解决方案。

Msg 116, Level 16, State 1, Procedure Name_Stored_Procedure, 
Line 113 Only one expression can be specified in the select list 
when the subquery is not introduced with EXISTS.

这是我的代码

 Set @SQLstring = 
 'Update #TempTable set Col1' + case when len(Convert(Varchar, (4+@counter)))=1 
 then '0' else '' end 
 + Convert(Varchar,(4+@counter)) + '=''' + 
 (select @Year, @Month, 
 Convert(Varchar,count(distinct Table.Column1)) 
 from Databse.Table 
 where DATEPART(yy,Time) = @Year 
 and DATEPART(mm,Time) = @Month 
 and Table.Column2 = @Column2 and Column3 in ('X','Z','Y - A')) 
 +''' where row = ' + CONVERT(varchar,10+@somevariable * 12)
 exec('' + @SQLstring +'')

3 个答案:

答案 0 :(得分:2)

如果您要构建一个SQL字符串并使用动态SQL执行它,那么您需要将其视为字符串

 Set @SQLstring = 
     'Update #TempTable set Col' 
            + case when len(Convert(Varchar, (4+@counter)))=1 then '0' else '' end
     ...

在内部选择中,从结果中删除@year, @month

 + ( select Convert(Varchar,count(distinct Table.Column1)) from databse.Table....

答案 1 :(得分:0)

在单独的选择查询中,将年份,月份计入以下部分。

(select @Year, @Month, 
 Convert(Varchar,count(distinct Table.Column1)) 
 from Databse.Table 
 where DATEPART(yy,Time) = @Year 
 and DATEPART(mm,Time) = @Month 
 and Table.Column2 = @Column2 and Column3 in ('X','Z','Y - A')) 

答案 2 :(得分:0)

选择CONCAT(@ year,@ monmon,convert ....)