我在视图语法中发现了奇怪的规则。它必须位于查询批处理的第一行,并且必须在当前数据库中创建。
我应该创建具有字符串变量(类型: VARCHAR或NVARCHAR)描述的动态名称的视图。这些视图应该在其他数据库中创建。
由于规则,CREATE语句必须在查询批处理的第一行,它不能在USE语句之后进行。因此,我试图用USE & GO语句更改数据库。但GO声明似乎明确了所有的变量。因此,它们无法描述GO语句后的视图名称。
你有什么要给我的吗?如果您知道创建视图语法规则的原因,请告诉我。
哦~对不起。我错过了一件事。数据库的名称也是动态的。而视图,我想要做的,不仅应该访问其他数据库的表,而且应该在其他数据库中创建。
虽然我不太了解OLAP,但我认为这种情况涉及OLAP。
发布于 2010-01-28 13:07:23
您可以动态创建一个sql-字符串并执行它。
 DECLARE @ViewName VARCHAR(100)
 SET @ViewName = 'MyView'
 USE MyDB;
 EXEC ( 'CREATE VIEW dbo.' + @ViewName + ' '
      + 'AS SELECT * FROM dbo.MyTable')发布于 2010-01-28 21:26:45
CREATE SYNONYM Resource1 FOR LinkedServer.Database.Schema.Table
GO
CREATE VIEW Resource1View
AS
SELECT *
FROM Resource1
GO现在,您可以随意修改同义词,引用它的所有视图都将引用正确的东西。如果这不能解决问题,那么我建议您设计系统的方式不是最好的。请更详细地描述你正在做什么,为什么我们可以更好地建议你。
至于"GO",它实际上不是SQL语句吗?它从未提交到服务器。客户端看到行中的GO,并将提交的查询分离为不同的批。跟踪将证明这一点,EXEC 'SELECT 1' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + 'SELECT 2'也会证明这一点。
如果您像在Analysis中一样使用OLAP,那么我没有足够的经验来帮助您,但是我认为有一些方法可以选择连接到的数据库,就像在SSRS中一样,而且查询不必存在于数据库中,而是可以存在于SSAS应用程序中。
发布于 2010-01-29 07:36:10
我找到了。是嵌套的主管。
https://stackoverflow.com/questions/2153667
复制相似问题