由于我需要通过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
语法错误在哪里?
答案 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)。