最初から、これを実行する必要がある場合は、SQL環境などの外部で実行する方法を見つけようとします。これは、提供しているソリューションがこれを実行するための適切な方法ではないためですが、機能します。だから私はこれが良い考えだと言っているのではありません。私はテストと呼ばれるspを持っています:
CREATE PROCEDURE Test
AS
SELECT 1 as One, 2 as Two
これを動的に実行するには、次のようにします。
DECLARE @i int
SET @i = 1;
DECLARE @SUCESS bit
SET @SUCESS = 0
WHILE(@SUCESS = 0)
BEGIN
DECLARE @proc VARCHAR(MAX)
DECLARE @count int
SET @count = 1
SET @proc = 'DECLARE @t TABLE ( c1 varchar(max) '
WHILE @count < @i
BEGIN
SET @proc = @proc + ', c' + CONVERT(varchar, @count + 1) + ' varchar(max) '
print @proc
SET @count = @count + 1
END
SET @proc = @proc + '); INSERT INTO @t EXEC Test'
BEGIN TRY
EXEC(@proc);
SET @SUCESS = 1
END TRY
BEGIN CATCH
SET @i = @i+1
END CATCH
END
SET @proc = @proc + '; SELECT * into ##t FROM @t '
EXEC( @proc )
SELECT * from ##t
列のデータ型や名前などが失われているため、これは問題の解決策としては不十分です。