我需要从数据库中的表中获取数据,在触发期间,数据库名称将被确定为变量。然后,我知道这个变量需要从确定的数据库中的表中获取一个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))
非常感谢您对此的任何帮助
答案 0 :(得分:0)
来自:Get result from dynamic SQL in stored procedure
SET @SQL = N'SELECT DISTINCT @FiscalYear = FiscalYear FROM ' + @DataSource;
EXEC sp_executesql @SQL, N'@FiscalYear INT OUTPUT', @FiscalYear OUTPUT;
PRINT @FiscalYear;
我重新设计使用sp_executesql方法,如上所示。这应该可以解决问题。
答案 1 :(得分: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