sql server 2008 查询表名前面必须添加数据库名吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 2008 查询表名前面必须添加数据库名吗相关的知识,希望对你有一定的参考价值。

不是 如果用了USE语句(或者选择的方式) 将当前的上下文切换到了这个数据库上, 就不用写数据库名了, 你写数据库名的话, 要把dbo也带上 参考技术A 这个要看你是写程序还要是查询框中直接写语句了!
如果查询框中写语句,你可写也可以选择数据库名。
如果是写程序,不关是java还是c#之类在连接数据库语句就是确定了数据库名,就不用写数据库名
当然写上也没有错,但如果数据库名变了就惨了,很多地方都要修改,建议是不要写了!

在 SQL Server 中,表添加一列。导致视图错误

【中文标题】在 SQL Server 中,表添加一列。导致视图错误【英文标题】:In SQL Server, table add a column. causing view error 【发布时间】:2013-05-06 01:41:25 【问题描述】:

在 SQL Server 中,使用两个表创建一个视图。视图中使用了* 的表之一。

然后我在表格中添加一列。现在这会导致视图错误。

必须重建视图才能解决此问题。

如果这张表使用了很多视图,如何识别相关视图并重建?

有几种方法?

谢谢!

测试环境:SQL Server 2008

测试 SQL:

 if exists(select * from sys.objects where name='tblTestA' and type='u')
DROP TABLE  tblTestA

create table tblTestA(Part varchar(10),Qty int)
insert into tblTestA values('A',10)
insert into tblTestA values('B',20)
go

if exists(select * from sys.objects where name='tblTestB' and type='u')
    DROP TABLE  tblTestB
GO

create table tblTestB(Part varchar(10),Price decimal(9,4))
GO

insert into tblTestB values('A',1.1)
insert into tblTestB values('B',2.2)
GO

if exists(select * from sys.objects where name='v_test' and type='v')
    DROP VIEW  v_test
go

create View v_test
as
  select a.*,b.Price
  from tblTestA a, tblTestB b 
  where a.Part=b.Part
go

执行:

select * from v_test 
go

结果:

Part Qty Price
A   10  1.1000
B   20  2.2000

添加一列

alter table tblTestA add Remark nvarchar(200) not null default('test')
go

执行:

select * from v_test 
go

结果:

Part Qty Price
A   10  test
B   20  test

【问题讨论】:

您可以尝试在视图定义中搜索已更改的表,***.com/questions/4765323/is-there-a-way-to-retrieve-the-view-definition-from -a-sql-server-using-plain-ado Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已随 ANSI-92 SQL 标准(超过 20 年前!) 谢谢!好习惯:select a.*,b.Price from tblTestA a inner join tblTestB b on a.Part=b.Part ? 【参考方案1】:

如果您创建视图WITH SCHEMABINDING,则不会遇到此问题。对于您的 视图;-) 您可以使用sp_refreshview。

要查找哪些视图依赖于哪些表,您可以使用 GUI,但这不能很好地扩展。相反,我建议您使用系统管理视图,例如sys.sql_expression_dependencies。这使您可以遍历依赖视图并为每个视图发出exec sp_refreshview

【讨论】:

【参考方案2】:

您可以使用 SQL Server Management Studio 找出相关视图。

您需要在 SSMS 中选择表,然后右键单击它。选择View Dependencies

在这张图片中,表格是CompanyCategoryXref(蓝色箭头)。这种情况下的依赖视图是CompanyCategory(红色箭头)。您还可以看到选中的项目CompanyCategory 的对象类型为View(黄色圆圈)。

【讨论】:

根据您的提示,我找到了所有视图。然后什么 ?一一手动执行查看脚本? @dream - 正如其他答案中所建议的那样,您可以拥有一个更新视图的脚本。【参考方案3】:

我们遇到了同样的问题 - 我们的解决方案必须提供一个 SQL 脚本来刷新所有视图。我们在每批修改数据库结构的更新脚本之后运行此脚本 - 这可确保所有视图都是最新的且正常运行。

这是 T-SQL 代码:

DECLARE @viewname sysname
DECLARE @counter INT

SET @counter = 1

DECLARE viewname_cursor CURSOR FAST_FORWARD FOR
    SELECT v.[name] 
    FROM sys.views v
    INNER JOIN sys.sql_modules m ON v.object_id = m.object_id
    WHERE m.is_schema_bound = 0  -- only refresh non-schemabound views

OPEN viewname_cursor

FETCH NEXT FROM viewname_cursor INTO @viewname

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT CAST(@counter AS varchar(3)) + '. Refreshed view ' + @viewname

    EXEC sp_refreshview @viewname   -- refresh the view in question

    SET @counter = @counter + 1

    FETCH NEXT FROM viewname_cursor INTO @viewname
END

CLOSE viewname_cursor
DEALLOCATE viewname_cursor
GO

【讨论】:

以上是关于sql server 2008 查询表名前面必须添加数据库名吗的主要内容,如果未能解决你的问题,请参考以下文章

sql server2008怎么实现查询某个数据库中所有的表名

sql server2008如何查询在指定的数据库中所有的表名和每个表的字段名及字段类型

sqlserver2008新建查询,表名下出现红波浪线,显示“表名无效”,但仍然可以查询得到结果

在 SQL Server 中,表添加一列。导致视图错误

sql server 2008 无法链接,急求,谢谢各位大侠

sql server 2008 添加账户出错 15401