Попытка написать общую хранимую процедуру, которая будет архивировать данные из разных таблиц с разными столбцами.Как мне поддерживать несколько параметров для хранимой процедуры?
Я передаю имя таблицы, имя столбца, тип столбца из PowerShell для запуска хранимой процедуры.Я объявил максимум 5 параметров для powershell и дал их значения как нулевые.Если для параметра не передано значение, оно будет принято как нулевое.Теперь мне нужно создать временную таблицу, используя эти параметры, чтобы продолжить архивацию.Я не могу передать нулевые значения в таблицу создания.Как мне продолжить отсюда?Или есть лучший способ сделать это?
Код до сих пор -
Файл конфигурации:
<appsettings>
<add key = "NumberOfParameters" value = "2"/>
<add key = "column1" value = "[TradeId] [varchar]"/>
<add key = "column2" value = "[TransactionNumber] [int]">
</appsettings>
Сценарий Powershell:
$numberOfParameters = [string]$appsettings["NumberOfParameters"]
$nulberofParametersInt =[int]$numberOfParameters
$Columns =@()
for(@j=0;$j -lt $numberOfParametersInt; $j++)
{
$k=$j+1
$stringValue = "Column" +$k
$Column = [string]$appsettings[$stringValue]
$Columns += $Column
}
.
.
.
$SqlCmd.COnnection =$SqlConnection
$SqlCmd.CommandText = "EXEC SP_storedProcedure " + $TableName + " " + $Columns
$Returnvalue = $SqlCmd.ExecuteScalar()
Хранимая процедура:
CREATE PROCEDURE [dbo].[SP_storedProcedure]
@tableName as VARCHAR(50),
@Column1 as varchar(50),
@COlumn2 as varchar(50) = null,
@Column3 as varchar(50) = null,
@Column4 as varchar(50) = null,
@Column5 as varchar(50) =null
as
begin
begin try
declare @i int
set @i =0
while(@i<5)
begin
set @String = '@Column' + @i
exec('if (@Column' +@I+' is not null)
set @String = @String +@Column'+@i)
set @i = @i+1
end
EXECUTE('CREATE TABLE #Temp('+@String+)')
INSERT into #Temp () exec('select columns from OriginalTable')