【问题标题】:How to insert "concat(col1+'-'+col2)" into database如何将“concat(col1+'-'+col2)”插入数据库
【发布时间】:2019-09-15 09:01:26
【问题描述】:

我想在数据库中插入一条记录,但是因为这个'-'而出现错误

INSERT INTO tblTransactionLogs (data, page, insertDate) 
    VALUES ('SELECT id, CONCAT(newcode, '-', shadeno) AS clothcode, CAST(ISNULL(T_Mtrs, 0) AS DECIMAL(10, 2)) - CAST(ISNULL(Used, 0) AS DECIMAL(10, 2)) AS rem, rate FROM tbl_cloth ORDER BY clothcode', '--', '2019-09-15')

我收到此错误:

消息 402,第 16 级,状态 1,第 1 行
数据类型 varchar 和 varchar 在减法运算符中不兼容

【问题讨论】:

    标签: c# asp.net sql-server-2012


    【解决方案1】:

    您似乎正试图将 SQL 语句插入到 data 列中。

    当尝试在 SQL Server 中使用 ' 字符作为字符串的一部分时,您需要通过乘以它来转义它:

    INSERT INTO tblTransactionLogs (data,page,insertDate) 
    VALUES('select id,CONCAT(newcode,''-'',shadeno) as clothcode,cast(ISNULL(T_Mtrs,0) as decimal(10,2))-cast(ISNULL(Used,0) as decimal(10,2)) as rem,rate from tbl_cloth  order by clothcode','--','2019-09-15')
    

    但是,请注意,如果这些 SQL 语句是由用户输入创建的(称为second order SQL Injection),则将 SQL 语句存储在表中以供以后执行可能存在安全风险

    【讨论】:

    • 是的,我知道风险,但这是为了我的开发需求,但我无法更改语句,因为它是正在执行的查询,我如何输入''-'',它会给出我的错误。
    • 撇号将被转义,而不是实际上加倍。当您从表中取出数据时(使用select data from tblTransactionLogs...),查询撇号不会加倍。
    【解决方案2】:

    你应该使用这个结构:

    插入到 tblTransactionLogs(数据、页面、插入日期) 从 tblY 中选择 x,y,z

    【讨论】:

    • 能否详细说明
    猜你喜欢
    • 2019-05-22
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多