sql >> Databasteknik >  >> RDS >> Sqlserver

Skickar dynamiska parametrar till en lagrad procedur i SQL Server 2008

Det är inte riktigt klart vad poängen med ditt omslagsförfarande är (revision? felsökning?), och det verkar vara en mycket besvärlig lösning. Om du förklarar varför du vill göra detta kan någon ha en helt annan och förhoppningsvis bättre lösning.

Det största problemet med ditt förslag är att du bara kan skicka parametrar som strängar och det betyder att du måste hantera alla problem med escape, datakonvertering/formatering och SQL-injektion som följer med dynamisk SQL . Det skulle vara mycket bättre att anropa varje procedur direkt och skicka korrekt skrivna parametrar från din anropskod.

Med det sagt, om du verkligen vill göra det kan du göra något så här:

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

Du bör också ta en titt på sp_executesql , som gör nästan exakt vad du vill, men den måste ha alla parameterdatatyper också, vilket du säger inte är möjligt i ditt scenario.



  1. SQL Server char och nchar kolumner söker olika

  2. Hur man skapar länkad server MySQL

  3. Generera datumintervall från två datumkolumner

  4. Mysql fulltextsökning med matchning och mot