【问题标题】:Select statement within an Insert statement with SQLKata使用 SQLKata 在插入语句中选择语句
【发布时间】:2019-12-02 16:11:22
【问题描述】:

我正在尝试在 SQLKata for C# 中复制此 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 表中,但还将Channels 表中的ChannelID 存储在其中。我需要检索用户输入的特定频道和修订号的 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-server sqlkata


    【解决方案1】:

    应该这样做:

    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 个)。

    【讨论】:

    • 这绝对是正确的设置,但是是的,我将它用于数据输入,@2、@3 和@4 作为参数将由我的程序填充。真的没有办法用 SqlKata 将这些值插入到插入语句中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多