为SQLCommand生成带“@”的Insert语句?

时间:2015-02-22 16:08:31

标签: sql-server ado.net

如果我使用SQLCommand,我通常需要类似的东西:

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

我可以通过一些简单的方法生成此字符串吗?

SSMS生成类似这样的内容

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

我能以某种方式使用它吗?

1 个答案:

答案 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) + ')