Sql server SQL Server 2008视图正在丢失默认值
我有一个奇怪的问题,在创建视图一段时间后,applicationID的默认值丢失或重置(我们不知道为什么,我们有0.000或0或null之类的值) 如果我们运行Sql server SQL Server 2008视图正在丢失默认值,sql-server,sql-server-2008,view,Sql Server,Sql Server 2008,View,我有一个奇怪的问题,在创建视图一段时间后,applicationID的默认值丢失或重置(我们不知道为什么,我们有0.000或0或null之类的值) 如果我们运行ALTER语句,applicationID的值返回到最初定义的值 ALTER VIEW [schemaA].[tableA] AS SELECT *, 123456 applicationID FROM [schemaB].[dbo].[tableA] 我需要提到的是,在运行ALTE
ALTER
语句,applicationID
的值返回到最初定义的值
ALTER VIEW [schemaA].[tableA]
AS
SELECT
*, 123456 applicationID
FROM
[schemaB].[dbo].[tableA]
我需要提到的是,在运行ALTER
语句之前,我们导出了视图DDL,它是正确的
如何确定是什么损坏了视图定义,或者视图是否应该有不同的定义(如果可能的话,可以设置默认值)
谢谢可能是这样的吗
CREATE TABLE testTbl(aColumn INT);
INSERT INTO testTbl VALUES(1),(2);
GO
CREATE VIEW vwTestTbl
AS
SELECT *,1234 applicationID
FROM testTbl;
GO
SELECT * FROM vwTestTbl;
/*
aColumn applicationID
1 1234
2 1234
*/
GO
--be aware of the fact, that the new column is called newColumn and its type is varchar(5)!
ALTER TABLE testTbl ADD newColumn varchar(5);
GO
UPDATE testTbl SET newColumn='test';
GO
--The varchar value "test" comes under the column caption "applicationID"!
SELECT * FROM vwTestTbl;
/*
aColumn applicationID
1 test
2 test
*/
GO
--now you re-compile it with your attempt to ALTER the VIEW
ALTER VIEW vwTestTbl
AS
SELECT *,1234 applicationID
FROM testTbl;
GO
SELECT * FROM vwTestTbl;
/*
aColumn newColumn applicationID
1 test 1234
2 test 1234
*/
GO
--clean up
DROP VIEW vwTestTbl;
DROP TABLE testTbl;
在任何情况下,这个
applicationID
都是文字(固定)值吗?您的CREATE VIEW
statemet是否与上述内容完全相同?如果没有,请发布完整的语句。@Shnugo该值在创建时是固定的,上面的语句完全相同。“创建时固定”的确切含义是什么?这个语句是由某种动态过程重新创建的吗?或者它只创建了一次,从未更改过?可能是有人更改了表结构(添加了一些字段),忘记了重新编译视图-在这种情况下,如果视图定义包含select*
,而不是显式字段列表,SQL server会将视图结果搞砸。@Arvo,根据您的评论,我在回答中对示例做了更具体的说明。事实上,这甚至会弄乱类型。。。有充分的理由反对SELECT*
理论上可能,我不知道谁可能正在运行“ALTER TABLE testTbl ADD applicationID INT NULL;”,如果是这样,我怎么知道呢?@christi_b,不知道您的进程,我无法告诉您。。。每个对象都有一个modify\u date
(尝试从sys.objects中选择一个SELECT*,其中name='someName'
您至少会发现,当对象上次被更改时……这似乎是最合理的情况
CREATE TABLE testTbl(aColumn INT);
INSERT INTO testTbl VALUES(1),(2);
GO
CREATE VIEW vwTestTbl
AS
SELECT *,1234 applicationID
FROM testTbl;
GO
SELECT * FROM vwTestTbl;
/*
aColumn applicationID
1 1234
2 1234
*/
GO
--be aware of the fact, that the new column is called newColumn and its type is varchar(5)!
ALTER TABLE testTbl ADD newColumn varchar(5);
GO
UPDATE testTbl SET newColumn='test';
GO
--The varchar value "test" comes under the column caption "applicationID"!
SELECT * FROM vwTestTbl;
/*
aColumn applicationID
1 test
2 test
*/
GO
--now you re-compile it with your attempt to ALTER the VIEW
ALTER VIEW vwTestTbl
AS
SELECT *,1234 applicationID
FROM testTbl;
GO
SELECT * FROM vwTestTbl;
/*
aColumn newColumn applicationID
1 test 1234
2 test 1234
*/
GO
--clean up
DROP VIEW vwTestTbl;
DROP TABLE testTbl;