更改列后数据类型更改为位
data type change to bit after alter column
我编写了这个查询,但不幸的是,我得到了这个错误:
"Argument data type bit is invalid for argument 1 of substring
function."
我的存储过程是:
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;
为什么不呢?第一个代码实际上更改了 table,因此 update
在 运行 时是正确的。在存储过程中,编译了这两个语句——但未编译 运行。这意味着 update
已编译,但 table 未更改。因此你得到一个错误。
虽然您可以使用动态 SQL 解决此问题,但我想问的是您为什么要修改存储过程中的列类型。这似乎很不规则。通常,存储过程不会做这样的修改。
ALTER table Table_1
ALTER COLUMN Id NVARCHAR(20)
//然后继续...
我编写了这个查询,但不幸的是,我得到了这个错误:
"Argument data type bit is invalid for argument 1 of substring function."
我的存储过程是:
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;
为什么不呢?第一个代码实际上更改了 table,因此 update
在 运行 时是正确的。在存储过程中,编译了这两个语句——但未编译 运行。这意味着 update
已编译,但 table 未更改。因此你得到一个错误。
虽然您可以使用动态 SQL 解决此问题,但我想问的是您为什么要修改存储过程中的列类型。这似乎很不规则。通常,存储过程不会做这样的修改。
ALTER table Table_1
ALTER COLUMN Id NVARCHAR(20)
//然后继续...