:
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
注:
- それは
SPID
ごとにテーブルを作成するために、貧しい人々のデザインのように見えます。関連:SELECT * FROM sales + @yymm
- 表名が
SYSNAME
データ型を持っている、あなたは、SQLクエリを連結すると、エラーが発生しやすい可能性があり、あなたがREPLACE
NOLOCK
読み取りコミットされていないにつながる可能性がある使用することができ
- SQLインジェクションに対する追加の保護のために
QUOTENAME
を追加することができなければなりません。
ような何か:
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;
ありがとうございました私のために働いている、まだ_SYSNAME_と_QUOTENAME_上のいくつかの研究を行う必要があります。 – Joby