如果我使用SQLCommand,我通常需要类似的东西:
INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)";
我可以通过一些简单的方法生成此字符串吗?
SSMS生成类似这样的内容
,[years]
,[source]
,[TimeStamp])
VALUES
(<count, int,>
,<sex_male, bit,>
,<Ethnicity, tinyint,>
我能以某种方式使用它吗?
答案 0 :(得分:1)
如果您经常需要这个,请考虑使用SSMS工具包。这generates CRUD according to user specified templates。
虽然不过特别强大的替代方案,但通过查找和替换非常简单。
SSMS生成类似
的内容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,>)
然后将顶部区域复制到底部
INSERT INTO [HumanResources].[Employee]
([BusinessEntityID]
,[NationalIDNumber]
,[LoginID]
,[CurrentFlag]
,[rowguid]
,[ModifiedDate])
VALUES
([BusinessEntityID]
,[NationalIDNumber]
,[LoginID]
,[CurrentFlag]
,[rowguid]
,[ModifiedDate])
然后选择底部部分,将[
替换为@
,将]
替换为空字符串。
或者,写一些查询sys.columns
并生成所需字符串的内容会非常简单。
(同样,假设您使用的列名称符合标准标识符的规则 - quotename
的非强大解决方案将有助于列名称,但如果您不是,则有助于参数名称。)< / p>
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) + ')