微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从存储过程中的动态SQL获取结果

您是否尝试过类似的方法

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 OUTPUT;

PRINT @FiscalYear;

您需要确保将nvarchar字符串加N作为前缀,例如SELECT @sql = N'SELECT ...

另外,您知道如果查询返回多行,则分配给@FiscalYear它的值是完全任意的,对吗?虽然您可能期望该表中有一个单一值,但使用MAX()TOP 1 ... ORDER BY确保仅分配一个可预测的值不会有什么坏处。

解决方法

我正在编写一个存储过程,需要在该过程中动态构造一个SQL语句以引用传入的表名。

我需要让该SQL语句返回结果,然后可以在整个过程的其余部分中使用它。

我已经尝试过使用临时表和其他所有东西,但是我不断收到一条消息,我需要声明变量等。

例如:

DECLARE @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 ' + @DataSource
EXEC(@SQL)
SELECT @FiscalYear = FiscalYear FROM @tempFiscalYear

或者…

DECLARE @FiscalYear INT  
DECLARE @DataSource NVARCHAR(25)
DECLARE @SQL NVARCHAR(250)
SELECT @DataSource = 'CustomerCosts20120328'
SELECT @SQL = 'SELECT DISTINCT @FiscalYear = FiscalYear FROM ' + @DataSource
EXEC(@SQL)

无论如何,有没有这样做而不使用实际表?

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。