【问题标题】:Am looking for SQL conversion using substitution variables of Oracle statement我正在使用 Oracle 语句的替换变量寻找 SQL 转换
【发布时间】:2013-07-11 14:03:56
【问题描述】:

我正在使用 SQL Server 2012 并正在寻找具有替换变量的 Oracle 语句的转换:

    UPDATE customers
    SET region = '&region'
    WHERE state = '&state'

请有人帮我解决这个问题。

【问题讨论】:

    标签: sql sql-server variables substitution sql-server-2012-express


    【解决方案1】:

    我绝不是 Oracle 专家,但我认为替代变量是特定于 SQL*PLUS 而不是 Oracle 数据库。

    SQL*PLUS

    define region=West
    define state=California
    
     UPDATE customers
        SET region = '&region'
        WHERE state = '&state'
    

    我的理解是SQL*PLUS会执行如下SQL:

     UPDATE customers
        SET region = 'West'
        WHERE state = 'California'
    

    MS SQL Server 2012 中的等价物是:

    Declare @Region varchar(100)
    Declare @State varchar(100)
    
    Set @Region = 'West'
    Set @State = 'California'
    
    Update Customers
    Set region = @Region
    Where State = @State
    

    或者您可能会丢失所有变量并简单地使用:

    Update Customers
    Set Region = 'West'
    Where State = 'California'
    

    编辑:

    更新只影响当前在表中的数据。如果您稍后将更多数据添加到表中,则需要再次运行更新。

    例如

    添加更多 State 为“California”的行不会自动将插入行的 Region 列设置为“West”。

    还要确保您对在表结构中声明的变量使用相同的数据类型(和长度)。

    【讨论】:

    • 感谢您的询问,对我很有帮助!另外,我只是想知道,执行上述语句是否意味着将来每当我在州中插入值作为“California”时,默认情况下将值“west”放在区域中,或者它只为当前客户表设置值?
    • 收到“字符串或二进制数据将被截断。语句已终止。”即使在分配变量之后
    • @PrincessS 关于您的第一条评论,请参阅我的编辑。您的第二条评论;您需要确保变量的长度(及其各自的值)与表结构的数据类型相匹配。
    • 它现在非常适合我。只是我在更新语句中使用了单引号。另外,感谢您提供的澄清。
    【解决方案2】:

    会是这样的

    Declare @State varchar(100)
    Declare @Region varchar(100)
    
    UPDATE customers
    SET region = @Region
    WHERE state = @State
    

    【讨论】:

    • 您还需要为变量赋值,否则它们将是NULL
    • @xionutz2k:我收到“字符串或二进制数据将被截断。语句已终止。”执行此操作后的消息
    • 报错说明我们定义的@Region变量的长度超过了customers表中region列的长度。我在定义变量时随机选择了 100 作为长度,但是您应该首先检查表格列的长度。尝试使用DESC客户先获取表的描述(列及其数据类型)
    • @xionutz2k:我为州和地区分配了与最初为客户表定义的相同的数据类型和长度。
    • 另一个可能的原因是您尝试使用超过其定义长度的值初始化@Region 变量
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多