Hallo Leute,
ich nutze MS SQL Server 2008 R2. Ich habe eine StoredProcedure, die ein gefiltertes select auf eine Tabelle ausführt. Der Filter wird der SP über einen Parameter übergeben. Ich muss das select mit Filter als dynamic SQL ausführen, um auch Spaltennamen als Filter nutzen zu können:
Die SP funktioniert ohne Probleme, Filter wie z.B. "BarcodeNumber=4711" können injected werden.
Der Aufruf SP passiert in C# über das Entity Framework. Wenn ich im Entity Data Model die SP aus der Datenbank importiere bekomme ich keinen Rückgabetyp, da die SP ja dynamisches SQL beinhaltet. Ich muss also den komplexen Rückgabetyp von Hand erstellen.
Gibt es keine Möglichkeit in der SP, einen Rückgabetyp zu deklarieren, den ich im Entity Data Model importieren kann? Das würde auch auf Datenbankebene weiterhelfen, wenn ich die SP noch an einem anderen Ort aufrufe.
Ich habe diverse Versuche mit einem User Defined Table Type unternommen, z.B.
und in der SP dann
Das funktioniert auf Datenbankebene ja gut; wenn ich die SP allerdings von C# aus aufrufen will kommt die Fehlermeldung "Eine INSERT EXEC-Anweisung kann nicht geschachtelt werden."
Habt ihr eine Idee? VIELEN DANK!
ich nutze MS SQL Server 2008 R2. Ich habe eine StoredProcedure, die ein gefiltertes select auf eine Tabelle ausführt. Der Filter wird der SP über einen Parameter übergeben. Ich muss das select mit Filter als dynamic SQL ausführen, um auch Spaltennamen als Filter nutzen zu können:
Code:
USE [LpcAutomation] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[usp_GetBarcode] @Filter nvarchar(max) AS BEGIN SET NOCOUNT ON; DECLARE @sql nvarchar(max) SET @sql = 'SELECT TOP (100) PERCENT dbo.Barcode.ID, dbo.Barcode.BarcodeNumber, dbo.Barcode.AssociatedMaterialInfo FROM dbo.Barcode' -- Adds filter, if given IF @Filter <> '' SET @sql = 'SELECT * FROM (' + @sql + ') as a WHERE ' + @Filter EXEC(@sql) END GO
Der Aufruf SP passiert in C# über das Entity Framework. Wenn ich im Entity Data Model die SP aus der Datenbank importiere bekomme ich keinen Rückgabetyp, da die SP ja dynamisches SQL beinhaltet. Ich muss also den komplexen Rückgabetyp von Hand erstellen.
Gibt es keine Möglichkeit in der SP, einen Rückgabetyp zu deklarieren, den ich im Entity Data Model importieren kann? Das würde auch auf Datenbankebene weiterhelfen, wenn ich die SP noch an einem anderen Ort aufrufe.
Ich habe diverse Versuche mit einem User Defined Table Type unternommen, z.B.
Code:
USE [LpcAutomation] GO CREATE TYPE [dbo].[GetBarcodeResult] AS TABLE( [ID] [uniqueidentifier] NOT NULL, [BarcodeNumber] [nvarchar](max) NOT NULL, [AssociatedMaterialInfo] [nvarchar](max) NULL, PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO
Code:
DECLARE @sql nvarchar(max) SET @sql = 'SELECT TOP (100) PERCENT dbo.Barcode.ID, dbo.Barcode.BarcodeNumber, dbo.Barcode.AssociatedMaterialInfo FROM dbo.Barcode' declare @temptable GetBarcodeResult insert into @temptable EXEC(@sql) select * from @temptable
Habt ihr eine Idee? VIELEN DANK!
Comment