0

我需要从数据库中的表中获取数据,其数据库名称将在触发器期间被确定为变量。然后,我知道这个变量需要从已确定数据库中的表中获取一个在触发器期间也被确定为变量的项目的 seqno。
我正在尝试这条路线,因为我假设我需要在将 SQL 语句设置为变量之前构建它。这不起作用,我需要知道如何做到这一点的最佳方法:

DECLARE @SU_SEQNO INTEGER, @SU_NAME VARCHAR(50), @SU_OWNER VARCHAR(15), @SUD_SEQNO INTEGER, @SQL NVARCHAR(500)

SET @SU_OWNER = 'XXX'
SET @SU_NAME = '1ABC234'

SET @SQL ='SELECT @SUD_SEQNO=SEQNO FROM ' + (@SU_OWNER) + '.SU_MAIN 
              WHERE UNITNAME= ' + @SU_NAME 
SET @SUD_SEQNO = (EXECUTE (@SQL))

非常感谢您对此的任何帮助

4

2 回答 2

0

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

SET @SQL = N'SELECT DISTINCT @FiscalYear = FiscalYear FROM ' + @DataSource;
EXEC sp_executesql @SQL, N'@FiscalYear INT OUTPUT', @FiscalYear OUTPUT;

PRINT @FiscalYear;

我会重新设计以使用 sp_executesql 方法,如上所示。这应该够了吧。

于 2013-04-12T09:55:17.097 回答
0

我已经修改了代码,它可以工作

declare @su_owner varchar(15) = 'DBTEST'
declare @SU_SEQNO INTEGER=1, @SUD_SEQNO INTEGER=0, @SQL NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500), @SU_NAME_INPUT VARCHAR(50)='SU123'

SET @SU_NAME_INPUT = (SELECT UNITNAME FROM SU_MAIN WHERE SEQNO=@SU_SEQNO)
SET @SU_NAME = (SELECT UNITNAME FROM SU_MAIN WHERE SEQNO=@SU_SEQNO)

SET @SQL = N'SELECT @sud_seqnoOUT=MAX(SEQNO) FROM ' + quotename(@su_owner) + '.[dbo].[SU_MAIN] WHERE UNITNAME]=@SU_NAME_INPUT' ;

SET @ParmDefinition = N'@SU_NAME_INPUT VARCHAR(50),@sud_seqnoOUT INT OUTPUT'

EXEC sp_executesql @SQL,@ParmDefinition,@SU_NAME_INPUT = @SU_NAME,
            @sud_seqnoOUT = @SUD_SEQNO OUTPUT
于 2013-04-15T04:00:15.910 回答