Sie müssen Variablen wie OUTPUT
Parameter übergeben:
DECLARE @TempTable NVARCHAR(MAX) = 'Test_'+ '1'; -- CONVERT(VARCHAR(10),@@SPID)
DECLARE @MAXCount VARCHAR(10);
DECLARE @MINCount VARCHAR(10);
DECLARE @SQLSelect NVARCHAR(MAX);
SET @SQLSelect = 'SELECT @MAXCount = MAX(RowID), @MINCount = MIN(RowID) FROM dbo.'
[email protected]+' (NOLOCK)';
EXEC dbo.SP_EXECUTESQL @SQLSelect
,N'@MAXCount VARCHAR(10) OUTPUT, @MinCount VARCHAR(10) OUTPUT'
,@MAXCount OUTPUT
,@MINCount OUTPUT;
SELECT @MAXCount, @MINCount;
LiveDemo
Hinweise:
- Es sieht aus wie ein schlechtes Design Tisch pro
SPID
zu erstellen. Verwandte: SELECT * FROM sales + @yymm
- Tabellenname
SYSNAME
Datentyp hat, sollten Sie QUOTENAME
für zusätzlichen Schutz vor SQL-Injection
- verketten SQL-Abfrage könnte fehleranfällig hinzufügen könnte, könnten Sie
REPLACE
NOLOCK
führen könnte zu Uncommited liest.
Etwas wie:
DECLARE @MAXCount VARCHAR(10)
,@MINCount VARCHAR(10);
DECLARE @SQLSelect NVARCHAR(MAX) =
N'SELECT @MAXCount = MAX(RowID), @MINCount = MIN(RowID)
FROM <table_name> WITH (NOLOCK)';
DECLARE @TempTable SYSNAME = QUOTENAME('Test_'+ '1'); -- CONVERT(VARCHAR(10),@@SPID)
SET @SQLSelect = REPLACE(@SQLSelect, '<table_name>', @TempTable);
EXEC dbo.SP_EXECUTESQL @SQLSelect
,N'@MAXCount VARCHAR(10) OUTPUT, @MinCount VARCHAR(10) OUTPUT'
,@MAXCount OUTPUT
,@MINCount OUTPUT;
SELECT @MAXCount, @MINCount;
Danke, dass für mich gearbeitet, müssen noch einige der Forschung auf dem _SYSNAME_ und _QUOTENAME_ zu tun. – Joby