首页 > 解决方案 > 使用 SQLKata 在插入语句中选择语句

问题描述

我正在尝试在 C# 的 SQLKata 中复制此 SQL Server 查询:

insert into ChannelData (ChannelID, DataSource, X, Y) 
values ((select ID 
         from Channels 
         where Channel = @0 and Revision = @1), @2, @3, @4)

我正在进入ChannelData表格ChannelData,但也将ChannelID表格中的内容存储Channels在其中。我需要检索用户输入的特定频道和修订号的 ID。我该如何正确地做到这一点?

到目前为止,我已经尝试过了,但这是我得到的最接近的

query = new Query("ChannelData").AsInsert(new[] { "ChannelID, DataSource, X, Y" }, new Query("Channels").Select("ID", "@2 as DataSource", "@3 as X", "@4 as Y").Where("Channel", "=", "N01E").Where("Revision", "=", 0));

这可以在一个 SQL 查询中完成,还是我必须在另一个调用中获取 ID?

标签: c#sql-serversqlkata

解决方案


这样的事情应该这样做:

var compiler = new SqlServerCompiler();

var query =
    new Query("ChannelData")
    .AsInsert(
        new[] { "ChannelID", "DataSource", "X","Y" },
        new Query("Channels")
        .Select("ChannelID", "DataSource", "X", "Y")
        .Where("Channel","N01E")
        .Where("Revision",0)
    );


var rawSql = compiler.Compile(query).RawSql;

这将返回:

INSERT INTO [ChannelData] ([ChannelID], [DataSource], [X], [Y])
SELECT [ChannelID], [DataSource], [X], [Y]
FROM [Channels] WHERE [Channel] = ? AND [Revision] = ?

其中,应该完成你想要的。如果您想显式使用上述语法,则需要先获取值,然后再构建查询。请记住,您可以拥有的参数数量是最大的(我认为是 1000 个)。


推荐阅读