gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:27:58 24 4
gpt4 key购买 nike

我正在编写一个存储过程,我需要在该过程中动态构造一个 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;

您需要确保使用 N 前缀 nvarchar 字符串,例如 SELECT @SQL = N'SELECT ... .

此外,您知道如果查询返回多行,则分配给 @FiscalYear 的值。完全是随意的吧?虽然您可能期望该表中只有一个值,但使用 MAX() 并没有什么坏处。或 TOP 1 ... ORDER BY以确保只分配一个单一的、可预测的值。

关于sql - 从存储过程中的动态 SQL 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com