by Anonymous » 14 Feb 2025, 07:11
Ich habe eine SQL -Serverinstanz, die viele Datenbanken enthält. Diese Datenbanken haben alle die gleiche Tabellenstruktur. Ich erstelle eine C# App, um eine Verbindung zu diesem Server herzustellen und dann gespeicherte Prozeduren auszuführen. . Meine Frage ist: Kann ich eine gespeicherte Prozedur erstellen, die ich den Datenbanknamen an übergeben kann, und es laufen lassen? < /P>
Mein C# ist ziemlich einfach. Ich habe die Helfer Klasse erstellt, um meine Verbindungszeichenfolge zu erstellen:
Code: Select all
public List
GetRunId(string selectedDB, string runId)
{
using (IDbConnection connection = new Microsoft.Data.SqlClient.SqlConnection(Helper.CnnVal(selectedDB)))
{
var output = connection.Query("dbo.GetRun @RunId", new { RunId = runId }).ToList();
return output;
}
}
Ich übergende derzeit den Datenbanknamen ausgewähltes DB an eine Verbindung zu und die Auslauf -ID 'Runid' zu suchen.
Mein Speichernde Prozedur ist einfach: < /p>
Code: Select all
USE [RP_Reserved_1]
GO
/****** Object: StoredProcedure [dbo].[GetRun] Script Date: 02/13/2025 14:25:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetRun]
@RunId char(36)
AS
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
ProcessRuns
WHERE
RunId = @RunId
< /code>
Ich habe mit einer Tabelle in der Master -Datenbank verbunden und einfach diese Abfrage ausgeführt. < /p>
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
RP_Reserved_1.dbo.ProcessRuns
< /code>
Es ging in die andere Datenbank und gab die Daten zurück. Das lässt mich denken, dass es möglich ist, aber ich habe wirklich keine Ahnung, wie es funktioniert. Ich möchte vermeiden, in jede Datenbank zu gehen und genau dieselbe gespeicherte Prozedur darin zu erstellen. /p>
so etwas wie dieses: < /p>
USE @SelectedDB
GO
/****** Object: StoredProcedure [dbo].[GetRun] Script Date: 02/13/2025 14:25:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetRun]
@RunId char(36)
AS
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
ProcessRuns
WHERE
RunId = @RunId
< /code>
Dann könnte ich diesen C# Code es aufrufen: < /p>
var output = connection.Query
("dbo.GetRun @SelectedDB, @RunId", new { SelectedDB = selectedDB, RunId = runId }).ToList();
Ist das möglich und wenn ja, wie?
Ich habe eine SQL -Serverinstanz, die viele Datenbanken enthält. Diese Datenbanken haben alle die gleiche Tabellenstruktur. Ich erstelle eine C# App, um eine Verbindung zu diesem Server herzustellen und dann gespeicherte Prozeduren auszuführen. . Meine Frage ist: Kann ich eine gespeicherte Prozedur erstellen, die ich den Datenbanknamen an übergeben kann, und es laufen lassen? < /P>
Mein C# ist ziemlich einfach. Ich habe die Helfer Klasse erstellt, um meine Verbindungszeichenfolge zu erstellen:
[code]public List
GetRunId(string selectedDB, string runId)
{
using (IDbConnection connection = new Microsoft.Data.SqlClient.SqlConnection(Helper.CnnVal(selectedDB)))
{
var output = connection.Query("dbo.GetRun @RunId", new { RunId = runId }).ToList();
return output;
}
}
[/code]
Ich übergende derzeit den Datenbanknamen ausgewähltes DB an eine Verbindung zu und die Auslauf -ID 'Runid' zu suchen.
Mein Speichernde Prozedur ist einfach: < /p>
[code]USE [RP_Reserved_1]
GO
/****** Object: StoredProcedure [dbo].[GetRun] Script Date: 02/13/2025 14:25:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetRun]
@RunId char(36)
AS
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
ProcessRuns
WHERE
RunId = @RunId
< /code>
Ich habe mit einer Tabelle in der Master -Datenbank verbunden und einfach diese Abfrage ausgeführt. < /p>
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
RP_Reserved_1.dbo.ProcessRuns
< /code>
Es ging in die andere Datenbank und gab die Daten zurück. Das lässt mich denken, dass es möglich ist, aber ich habe wirklich keine Ahnung, wie es funktioniert. Ich möchte vermeiden, in jede Datenbank zu gehen und genau dieselbe gespeicherte Prozedur darin zu erstellen. /p>
so etwas wie dieses: < /p>
USE @SelectedDB
GO
/****** Object: StoredProcedure [dbo].[GetRun] Script Date: 02/13/2025 14:25:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetRun]
@RunId char(36)
AS
SELECT
RunId, RunDate, ActualDate, StopDate
FROM
ProcessRuns
WHERE
RunId = @RunId
< /code>
Dann könnte ich diesen C# Code es aufrufen: < /p>
var output = connection.Query
("dbo.GetRun @SelectedDB, @RunId", new { SelectedDB = selectedDB, RunId = runId }).ToList();
[/code]
Ist das möglich und wenn ja, wie?