sql >> Databáze >  >> RDS >> Sqlserver

Předávání dynamických parametrů do uložené procedury v SQL Server 2008

Není ve skutečnosti jasné, jaký smysl má váš obalový postup (audit? ladění?), a zdá se to jako velmi nepříjemné řešení. Pokud vysvětlíte, proč to chcete udělat, někdo může mít úplně jiné a doufejme, že lepší řešení.

Největší problém s vaším návrhem je, že můžete předávat parametry pouze jako řetězce, a to znamená, že musíte zvládnout všechny problémy s escapováním, konverzí/formátováním dat a vkládáním SQL, které přicházejí s dynamické SQL . Bylo by mnohem lepší volat každou proceduru přímo a předat správně zadané parametry z vašeho volacího kódu.

Po tom všem, pokud to opravdu chcete udělat, můžete udělat něco takového:

create proc dbo.ExecuteProcedure
    @ProcedureName sysname,
    @Parameters nvarchar(max),
    @Debug bit = 0x0,
    @Execute bit = 0x1
as
set nocount on
begin

declare @sql nvarchar(max)
set @sql = 'exec ' + quotename(@ProcedureName) + ' ' + @Parameters

if @Debug = 0x1 print @sql

if @Execute = 0x1 exec(@sql)

end
go

exec dbo.ExecuteProcedure 'dbo.SomeProc', '@p1 = 1, @p2 = ''themhz''s proc''', 0x1, 0x0

Měli byste se také podívat na sp_executesql , který dělá téměř přesně to, co chcete, ale musí mít také všechny datové typy parametrů, což podle vás není ve vašem scénáři možné.



  1. Získejte všechna data v měsíci spolu s daty z tabulky

  2. Jak odstranit čárky celého čísla z výběrového dotazu MY SQL

  3. Migrace MySQL na SQL Server

  4. Migrace z Postgres na SQL Server 2008