我有一个选择字段到数据表的sproc。 我有一个源表,并创建了一个指向同一源表的视图。当我使用表作为源运行sproc时,所有都按预期工作,但是当我使用视图作为源运行sproc时,没有任何作用。
任何关于我所缺少的内容都会有所帮助 谢谢比尔
SET @SQL = 'SELECT ' + @TheID + ' as cardID
INTO ' + @PV_TempPivotItems + '
FROM ' + @FromTab;
EXEC sp_executesql @SQL;
当@FromTab
是一个表时,它可以正常工作,但当@FromTab
被查看时,它会失败。
SET @itemProvision = 'ALTER TABLE ' + @PV_TempPivotItems +
当我尝试更改从源表创建的新表时,它按预期工作但当我尝试使用视图作为源创建时更改新表时,我找不到表。
IF EXISTS(SELECT name
FROM sysobjects
WHERE name = @PV_TempPivotItems
AND xtype = 'U')
BEGIN
EXEC('drop table ' + @PV_TempPivotItems)
END
SET @SQL ='SELECT ' + @TheID + ' as cardID
INTO ' + @PV_TempPivotItems + '
FROM ' + @FromTab;
EXEC sp_executesql @SQL;
SET @itemProvision = 'ALTER TABLE ' + @PV_TempPivotItems + '
ADD
CardName varchar(50),
CardDescription varchar(max),
CardHref varchar(250),
CardImage varchar(250),
CONSTRAINT PK_PV_TempPivotItems PRIMARY KEY(cardID)
;'
EXEC sp_executesql @itemProvision;
答案 0 :(得分:1)
发现问题 我通过@FromTab参数从源数据动态获取主键,并使用返回的字段来设置@TheID参数,然后在其他查询中使用该参数。 当源是Table时返回主键字段名称,但当源是View时未返回任何内容。不用说,依赖于@TheID参数的后续查询无法执行。
非常感谢 pyNoob 为您提供时间和帮助。
答案 1 :(得分:0)
我测试了以下脚本,每个脚本都按预期工作。脚本A使用物理表作为第一个动态表创建的源。脚本B使用视图作为源表创建。
两者都成功执行并产生相同的输出。请参阅下文。
脚本A |物理表作为来源
GO
--CREATE PHYSICAL TABLE FOR TEST
CREATE TABLE dbo.testdata (COL_A INT NOT NULL)
INSERT INTO testdata
VALUES (1),(2),(3),(4),(5)
--TEST DYNAMIC SQL TABLE CREATION USING PHYSICAL TABLE
GO
DECLARE @PV_TempPivotItems NVARCHAR(50) = 'dbo.newtable'
DECLARE @FromTab NVARCHAR(50) = 'dbo.testdata'
DECLARE @TheID NVARCHAR(50) = 'COL_A'
DECLARE @SQL NVARCHAR(255)
SET @SQL ='SELECT ' + @TheID + ' as cardID
INTO ' + @PV_TempPivotItems + '
FROM ' + @FromTab;
EXEC sp_executesql @SQL;
-- TEST ALTER TABLE WITH PHYSICAL TABLE
GO
DECLARE @PV_TempPivotItems NVARCHAR(50) = 'dbo.newtable'
DECLARE @itemProvision NVARCHAR(255)
SET @itemProvision = 'ALTER TABLE ' + @PV_TempPivotItems + '
ADD
CardName varchar(50),
CardDescription varchar(max),
CardHref varchar(250),
CardImage varchar(250),
CONSTRAINT PK_PV_TempPivotItems PRIMARY KEY(cardID)
;'
EXEC sp_executesql @itemProvision;
脚本B |查看表创建源
GO
--CREATE PHYSICAL TABLE FOR TEST
CREATE TABLE dbo.testdata (COL_A INT NOT NULL)
INSERT INTO testdata
VALUES (1),(2),(3),(4),(5)
--CREATE VIEW FROM PHYSICAL TABLE
GO
CREATE VIEW card_view
as
SELECT * FROM dbo.testdata
--TEST DYNAMIC SQL TABLE CREATION USING VIEW
GO
DECLARE @PV_TempPivotItems NVARCHAR(50) = 'dbo.newtable'
DECLARE @FromTab NVARCHAR(50) = 'dbo.card_view'
DECLARE @TheID NVARCHAR(50) = 'COL_A'
DECLARE @SQL NVARCHAR(255)
SET @SQL ='SELECT ' + @TheID + ' as cardID
INTO ' + @PV_TempPivotItems + '
FROM ' + @FromTab;
EXEC sp_executesql @SQL;
-- TEST ALTER TABLE WITH PHYSICAL TABLE CREATED FROM VIEW
GO
DECLARE @PV_TempPivotItems NVARCHAR(50) = 'dbo.newtable'
DECLARE @itemProvision NVARCHAR(255)
SET @itemProvision = 'ALTER TABLE ' + @PV_TempPivotItems + '
ADD
CardName varchar(50),
CardDescription varchar(max),
CardHref varchar(250),
CardImage varchar(250),
CONSTRAINT PK_PV_TempPivotItems PRIMARY KEY(cardID)
;'
EXEC sp_executesql @itemProvision;
<强> RESULT 强>