回答

收藏

从存储过程中的动态SQL获取结果

技术问答 技术问答 272 人阅读 | 0 人回复 | 2023-09-14

我正在编写一个存储过程,需要在这个过程中动态构建一个存储过程SQL引用传入的表名。
+ G' B1 r1 o7 E1 x' y5 X我需要让该SQL句子返回结果,然后在整个过程的其他部分使用。; ]9 {, l0 @4 Z: h! n
我试图使用临时表和其他一切,但我不断收到一条信息,我需要声明变量等等。* {$ R" A. s( ^' j# ?: D7 f% |
例如:
% P5 c& F" h* |: y# zDECLARE @FiscalYear INT    DECLARE @DataSource NVARCHAR(25)DECLARE @SQL NVARCHAR(250)SELECT @DataSource = 'CustomerCosts20120328'DECLARE @tempFiscalYear TABLE ( FiscalYear INT ) SELECT @SQL = 'INSERT INTO @tempFiscalYear SELECT DISTINCT FiscalYear FROM '   @DataSourceEXEC(@SQL)SELECT @FiscalYear = FiscalYear FROM @tempFiscalYear或者…' Q+ }  V  d( I' l( R! P: ~: C
DECLARE @FiscalYear INT  DECLARE @DataSource NVARCHAR(25)DECLARE @SQL NVARCHAR(250)SELECT @DataSource = 'CustomerCosts20120328'SELECT @SQL = 'SELECT DISTINCT @FiscalYear = FiscalYear FROM '   @DataSourceEXEC(@SQL)无论如何,在不使用实际表而不使用实际表?
+ L: }( o- a- C谢谢。1 f/ i+ g! B7 N
                                                               
9 [/ w' K5 Z; h& [+ S    解决方案:                                                               
0 d) r( J. g" c, }( O                                                                你尝试过类似的方法吗:# N% P7 h- M) l$ d
DECLARE @FiscalYear INT,@DataSource NVARCHAR(25),@SQL NVARCHAR(250);SET @DataSource = N'CustomerCosts20120328';SET @SQL = N'SELECT DISTINCT @FiscalYear = FiscalYear FROM '   @DataSource;EXEC sp_executesql @SQL,N'@FiscalYear INT OUTPUT',@FiscalYear OUTPUTRINT @FiscalYear;你需要保证nvarchar字符串加N以前缀为例SELECT @SQL = N'SELECT ...。, e- u2 W; T' G& H8 M. l4 p
另外,你知道,如果查询返回多行,分配给你@FiscalYear它的值是完全任意的,对吗?虽然您可能希望表中有一个单一值,但使用它MAX()或TOP1 ... ORDER BY确保只分配一个可预测值没有坏处。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则