Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Предаване на динамични параметри към съхранена процедура в SQL Server 2008

Не е съвсем ясно какъв е смисълът на вашата процедура за обвиване (одит? отстраняване на грешки?) и изглежда като много неудобно решение. Ако обясните защо искате да направите това, някой може да има напълно различно и надяваме се по-добро решение.

Най-големият проблем с вашето предложение е, че можете да предавате параметри само като низове и това означава, че трябва да се справите с всички проблеми с екранирането, преобразуването/форматирането на данни и SQL инжектирането, които идват с динамичен SQL . Би било много по-добре да извиквате всяка процедура директно, като предавате правилно въведени параметри от вашия извикващ код.

Като казах всичко това, ако наистина искате да го направите, можете да направите нещо подобно:

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

Трябва също така да погледнете sp_executesql , което прави почти точно това, което искате, но трябва да има и всички типове параметрични данни, което според вас не е възможно във вашия сценарий.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008:INSERT, ако не излиза, поддържайте уникална колона

  2. Изчислете общата цена на притежание за мониторинг на SQL Server

  3. Как да се свържете с SQL Server чрез интернет връзка

  4. sql първичен ключ и индекс

  5. Как работят имплицитните транзакции в SQL Server