加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:47:26 所属栏目:MsSql教程 来源:网络整理
导读:我正在编写一个存储过程,我需要在过程中动态构造一个SQL语句来引用传入的表名. 我需要让这个SQL语句返回一个结果,然后我可以在整个过程的其余部分使用它. 我已经尝试过使用临时表和所有内容,但我不断收到一条消息,我需要声明变量等. 例如: DECLARE @FiscalYe
我正在编写一个存储过程,我需要在过程中动态构造一个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)

无论如何不使用实际的表来做到这一点?

谢谢.

解决方法

你尝试过这样的事情:
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来确保只分配一个可预测的值是不会有害的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读