Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入查询中的内部联接?_C#_Sql_Insert - Fatal编程技术网

C# 插入查询中的内部联接?

C# 插入查询中的内部联接?,c#,sql,insert,C#,Sql,Insert,我想做这样的事情: insert into TableA (val1,val2) values ("value",(select top 1 tableB.X from tableB where tableB.Y=@Y)) 我得到这个错误: 在此上下文中不允许子查询。只允许使用标量表达式 如何停止该错误?假设您使用的是SQL Server: insert into tableA (val1, val2) select top 1 'value', tableB.x fr

我想做这样的事情:

insert into TableA 
   (val1,val2) 
values
   ("value",(select top 1 tableB.X from tableB where tableB.Y=@Y))
我得到这个错误:

在此上下文中不允许子查询。只允许使用标量表达式


如何停止该错误?

假设您使用的是SQL Server:

insert into tableA 
  (val1, val2) 
select top 1 'value', tableB.x from tableB where tableB.Y = @y 

我假设您必须直接使用insert into表格选择。。。语法
在这种情况下没有“值”。
上面的人比我快,但我同意他们的建议

你很接近:

INSERT INTO TableA(val1, val2)
SELECT top 1 "value",  X FROM TableB WHERE Y = @y
试试这个

insert into TableA (val1,val2) 
   select top 1 "value",X from tableB where Y=@Y

另一个较差的选项,代码更改较少: 定义一个临时值

declare @scalarval int
select @scalarval = tableB.X from tableB where tableB.Y=@Y
insert into TableA (val1,val2) 
values("value",@scalarval)
然而,插入语法更清晰

StringBuilder sb=new StringBuilder();
sb.Append("declare @id int select @id = top 1 TableB.id from TableB where TableB.DefaultName=@DefaultName order by TableB.id desc insert into TableA(col1,col2,col3,col4)  Values (@val1,@val2,@val3,@id)");
顶部附近的语法不正确

这个怎么办


//mssql服务器

我相信你是对的;我不相信你能把TOP1选择变成这样的变量。也许选择前1名?修复了查询。