通过发布请求在SQL Server中的tempdb中创建视图

时间:2016-02-08 13:30:03

标签: sql sql-server

由于我需要通过http post请求发送查询语句,因此存在某些限制。 它应该是一个班轮 2.它应该在tempdb中创建,因为我将在之后删除它。 由于SQL Server仅在新行中使用CREATE VIEW语句,因此我将新行字符添加到语句中。这是声明:

DECLARE @NewLineChar AS CHAR(2) = CHAR(13) + CHAR(10);  ('USE tempdb;' +@NewLineChar + 'GO' +@NewLineChar +'CREATE VIEW temp_view AS select name from sys.databases') 

此查询给出了以下错误:

  

Msg 102,Level 15,State 1。   'USE tempdb;'附近的语法不正确。 (第1行)

可能是什么问题? 感谢

编辑:同样的查询就像这样

USE tempdb;
GO 
CREATE VIEW temp_view AS select name from sys.databases

语法错误在哪里?

2 个答案:

答案 0 :(得分:3)

  

由于SQL Server仅在新行中使用CREATE VIEW语句,因此我将新的行字符添加到语句中。

我从未听说过这样的要求。文档的含义是: CREATE VIEW必须是查询批处理中的第一个语句。

您在问题中的陈述没有意义。您不能只在SSMS中删除VARCHAR并期望SQL Server只执行它。

您可能想要的是以下内容:

USE tempdb;
DECLARE @stmt NVARCHAR(MAX)=N'CREATE VIEW temp_view AS SELECT name FROM sys.databases;';
EXECUTE sp_executesql @stmt;

或者在一行中:

USE tempdb;DECLARE @stmt NVARCHAR(MAX)=N'CREATE VIEW temp_view AS SELECT name FROM sys.databases;';EXECUTE sp_executesql @stmt;

答案 1 :(得分:1)

评论时间有点长。

您可以使用名称_temp_<something>在当前数据库中创建视图。如果要模拟临时表,甚至可以包含会话信息。

或者,创建一个没有行的临时表:

select top 0 *
into #temp
from <whatever>;

您可以访问此表的结构。

如果您使用的是最新版本的SQL Server,请使用sp_describe_first_result_set(请参阅here)。