繁体   English   中英

数据类型在更改列后更改为位

[英]data type change to bit after alter column

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

“参数数据类型位对于子字符串函数的参数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),我的更新查询绝对可以工作。

谁能解释为什么会这样,我该如何解决?

此代码有效:

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解决此问题,但我想问一下为什么要在存储过程中修改列类型。 这似乎很不正常。 通常,存储过程不进行此类修改。

ALTER table Table_1 
ALTER COLUMN Id NVARCHAR(20)

//然后继续...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM