use*_*640 2 sql t-sql sql-server-2000
我写了一个存储过程如下:
CREATE PROC spSoNguoiThan
@SNT int
AS
begin
IF not exists (select column_name from INFORMATION_SCHEMA.columns where
table_name = 'NhanVien' and column_name = 'SoNguoiThan')
ALTER TABLE NhanVien ADD SoNguoiThan int
else
begin
UPDATE NhanVien
SET NhanVien.SoNguoiThan = (SELECT Count(MaNguoiThan)FROM NguoiThan
WHERE MaNV=NhanVien.MaNV
GROUP BY NhanVien.MaNV)
end
SELECT *
FROM NhanVien
WHERE SoNguoiThan>@SNT
end
GO
Run Code Online (Sandbox Code Playgroud)
然后我得到错误:
Server: Msg 207, Level 16, State 1, Procedure spSoNguoiThan, Line 12
Invalid column name 'SoNguoiThan'.
Server: Msg 207, Level 16, State 1, Procedure spSoNguoiThan, Line 15
Invalid column name 'SoNguoiThan'.
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
谢谢!
在CREATE期间解析存储的proc时,该列不存在,因此您会收到错误.
逐行运行内部代码是有效的,因为它们是分开的.第二批(UPDATE)运行,因为列存在.
解决这个问题的唯一方法是使用动态SQL进行更新并选择,以便在EXECUTE时间之前解析它(不像现在那样创建时间).
但是,这是我真的不会做的事情:DDL和DML在同一位代码中