【问题标题】:data type change to bit after alter column更改列后数据类型更改为位
【发布时间】:2018-11-22 23:29:14
【问题描述】:

我对这个查询进行了编码,但不幸的是,我收到了这个错误:

"子串参数1的参数数据类型位无效 函数。”

我的存储过程是:

ALTER TABLE A ALTER COLUMN B nvarchar(20);  
UPDATE A SET B = CASE WHEN SUBSTRING(B, 1, 2)>1000 
        THEN '1' + B ELSE B END

我转换了我的数据,但再次出现错误。

如果没有第一个更新查询(Alter Table Alter Column),我的更新查询绝对有效。

谁能解释为什么会发生这种情况以及我应该如何解决它?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 我使用 sql_server 2008:)

标签: sql sql-server-2008 stored-procedures type-conversion alter


【解决方案1】:

此代码有效:

create table a (b bit);

alter table a alter column b nvarchar(20);
go

update a
    set b = substring(b, 1, 2);

这段代码没有:

create procedure p as
begin
    alter table a alter column b nvarchar(20);

    update a
        set b = substring(b, 1, 2);
end;

为什么不呢?第一个代码实际上更改了表格,因此update 在运行时是正确的。在存储过程中,这两个语句被编译——但不运行。这意味着 update 已编译,但表没有更改。因此你会得到一个错误。

虽然您可以使用动态 SQL 来解决这个问题,但我会问您为什么要修改存储过程中的列类型。这似乎很不规则。通常,存储过程不会进行此类修改。

【讨论】:

    【解决方案2】:
    ALTER table Table_1 
    ALTER COLUMN Id NVARCHAR(20)
    

    //然后继续……

    【讨论】:

      猜你喜欢
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 2015-04-22
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多