Microsoft SQL Server 2008具体
我想做的是:
C1,C2,C3
和任意数量的行col
和最多3行 Table2
中的每一行都包含C1
,C2
或C3
(无重复)
我想做点什么
create view v1 on
(
select (select col from Table2) from Table1
)
因此,如果Table2
包含C1
和C2
,则创建的视图会显示C1
和C2
如果更新了Table2
并添加了C3
,并且重新执行查询,则视图现在会显示C1
,C2
和C3
答案 0 :(得分:1)
您无法创建执行此操作的视图。
但是您可以创建将返回所需结果的动态SQL(即:在存储过程中)。
declare @s varchar(500)
select @s = ''
select @s = ', ' + col from table2
declare @sql nvarchar(1000)
select @sql = 'select ' + substring(@s, 2, len(@s)) + ' from table1'
exec sp_executesql @sql
答案 1 :(得分:1)
找到解决方案
使用以下方法:
创建一个存储过程,通过使用游标迭代每一行并形成正确的字符串来生成所需的语句create view v1 on (select C1,c2 from t2)
。
在exec()中使用此字符串来创建视图。
答案 2 :(得分:0)
我不认为这是可能的。
如果你真的想参与这样的事情,我会看到两种可能性:
答案 3 :(得分:0)
尝试以下查询
DECLARE @coll nvarchar(100)
DECLARE @query nvarchar(4000)
set @query = 'select '
DECLARE @colcursor CURSOR
SET @colcursor = CURSOR FOR
SELECT col
FROM Table2
OPEN @colcursor
FETCH NEXT
FROM @colcursor INTO @coll
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @coll
set @query = @query + @coll + ','
FETCH NEXT
FROM @colcursor INTO @coll
END
CLOSE @colcursor
DEALLOCATE @colcursor
set @query = left(@query,(len(@query)-1)) + 'from Table1'
print @query
exec(@query)