Generiere Insert-statement mit "@" für SQLCommand?

Wenn ich SQLCommand verwende, brauche ich normalerweise etwas wie:

INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)"; 

Gibt es eine einfache Möglichkeit, diese String zu generieren?

SSMS erzeugt so etwas

  ,[years] ,[source] ,[TimeStamp]) VALUES (<count, int,> ,<sex_male, bit,> ,<Ethnicity, tinyint,> 

Kann ich das irgendwie benutzen?

Wenn Sie dies häufig benötigen, dann betrachten Sie SSMS-Werkzeuge packen. Dies erzeugt CRUD nach benutzerdefinierten templates .

Eine adhoc nicht besonders robuste Alternative ist ziemlich einfach mit finden und replace aber.

SSMS erzeugt so etwas wie

 INSERT INTO [HumanResources].[Employee] ([BusinessEntityID] ,[NationalIDNumber] ,[LoginID] ,[CurrentFlag] ,[rowguid] ,[ModifiedDate]) VALUES (<BusinessEntityID, int,> ,<NationalIDNumber, nvarchar(15),> ,<LoginID, nvarchar(256),> ,<CurrentFlag, Flag,> ,<rowguid, uniqueidentifier,> ,<ModifiedDate, datetime,>) 

Dann kopiere den oberen Abschnitt nach unten

 INSERT INTO [HumanResources].[Employee] ([BusinessEntityID] ,[NationalIDNumber] ,[LoginID] ,[CurrentFlag] ,[rowguid] ,[ModifiedDate]) VALUES ([BusinessEntityID] ,[NationalIDNumber] ,[LoginID] ,[CurrentFlag] ,[rowguid] ,[ModifiedDate]) 

Und wähle den unteren Abschnitt und ersetze [ mit @ und ] mit einem leeren String.

Oder alternativ wäre es ziemlich trivial, etwas zu schreiben, das sys.columns abfragt und die gewünschte characterfolge erzeugt.

(Wieder eine nicht robuste Lösung, die davon ausgeht, dass Sie Spaltennamen verwenden, die den Regeln für Standard-Identifikatoren entsprechen – quotename würde mit den Spaltennamen helfen, aber nicht die Parameternamen, wenn Sie nicht sind.)

 DECLARE @QualifiedName NVARCHAR(500) = '[HumanResources].[Employee]'; WITH C AS (SELECT * FROM sys.columns WHERE object_id = object_id(@QualifiedName) AND is_computed = 0 AND is_identity = 0) SELECT ' INSERT INTO ' + @QualifiedName + ' (' + SUBSTRING((SELECT ',' + name FROM C ORDER BY column_id FOR XML PATH('')), 2, 8000) + ') VALUES (' + SUBSTRING((SELECT ',@' + name FROM C ORDER BY column_id FOR XML PATH('')), 3, 8000) + ')