我有一个在窗体应用程序中运行的SQL语句。 我正在使用SQL Server 2008进行开发和测试。这里一切都很好。
SqlCommand command1 = new SqlCommand("insert into payment_detail ( " +
"transaction_id, enrolment_id, hkid_1, section_r, " +
"classes, section_fee, assist_amt, additional_assist_amt, " +
"discount_amt, coupon_amt, coupon_amt_no_number, " +
"paid_amt, last_updated_by, last_updated_date) values " +
"(@transaction_id, @enrolment_id, @hkid_1, @section_r, " +
"@classes, @section_fee, (select section_fee - adjusted_section_fee from coursenew where coursecode = @courseCode and section_r = @section_r), @additional_assist_amt, " +
"@discount_amt, @coupon_amt, @coupon_amt_no_number, " +
"@paid_amt, @last_updated_by, GETDATE())"
, myConnection);
但是当转移到使用SQL Server 2005的另一个工作站时。 它会出现如下错误
在此上下文中不允许使用子查询。只允许使用标量表达式。
很抱歉,由于计算机只能安装一个版本的SQL Server。 我无法使用SQL Server 2005测试脚本。
请帮助和谢谢。
完整的sql语句将在下面列出
insert into payment_detail ( transaction_id, enrolment_id, hkid_1, section_r, classes, section_fee, assist_amt, additional_assist_amt, discount_amt, coupon_amt, coupon_amt_no_number, paid_amt, last_updated_by, last_updated_date) values (@transaction_id, @enrolment_id, @hkid_1, @section_r, @classes, @section_fee, (select section_fee - adjusted_section_fee from coursenew where coursecode = @courseCode and section_r = @section_r), @additional_assist_amt, @discount_amt, @coupon_amt, @coupon_amt_no_number, @paid_amt, @last_updated_by, GETDATE())"
答案 0 :(得分:2)
您可以将其转换为使用子查询从select而不是uf插入的查询:
insert into payment_detail (
transaction_id, enrolment_id, hkid_1, section_r, classes, section_fee,
assist_amt,
additional_assist_amt, discount_amt, coupon_amt, coupon_amt_no_number,
paid_amt, last_updated_by, last_updated_date
)
select
@transaction_id, @enrolment_id, @hkid_1, @section_r, @classes, @section_fee,
section_fee - adjusted_section_fee,
@additional_assist_amt, @discount_amt, @coupon_amt, @coupon_amt_no_number,
@paid_amt, @last_updated_by, GETDATE()
from
coursenew
where
coursecode = @courseCode and section_r = @section_r
答案 1 :(得分:0)
最简单的方法是在运行插入之前将select语句放入局部变量,然后使用临时表代替子查询。
https://msdn.microsoft.com/en-us/library/ms188927.aspx
编辑:选择局部变量的具体示例。 https://msdn.microsoft.com/en-us/library/ms187330.aspx
答案 2 :(得分:0)
这是因为您的子查询确实返回的值超过一个标量值 它与SQLServer的版本无关,是一个逻辑问题 把它写成吼叫:
select TOP 1 section_fee - adjusted_section_fee from coursenew where coursecode = @courseCode and section_r = @section_r