我正在
此版本的SQL Server不支持语句“SELECT INTO” 在SQL Server中
用于存储过程内的以下查询
DECLARE @sql NVARCHAR(MAX)
,@sqlSelect NVARCHAR(MAX) = ''
,@sqlFrom NVARCHAR(MAX) = ''
,@sqlTempTable NVARCHAR(MAX) = '#itemSearch'
,@sqlInto NVARCHAR(MAX) = ''
,@params NVARCHAR(MAX)
SET @sqlSelect ='SELECT
,IT.ITEMNR
,IT.USERNR
,IT.ShopNR
,IT.ITEMID'
SET @sqlFrom =' FROM dbo.ITEM AS IT'
SET @sqlInto = ' INTO ' + @sqlTempTable + ' ';
IF (@cityId > 0)
BEGIN
SET @sqlFrom = @sqlFrom +
' INNER JOIN dbo.CITY AS CI2
ON CI2.CITYID = @cityId'
SET @sqlSelect = @sqlSelect +
'CI2.LATITUDE AS CITYLATITUDE
,CI2.LONGITUDE AS CITYLONGITUDE'
END
SELECT @params =N'@cityId int '
SET @sql = @sqlSelect +@sqlInto +@sqlFrom
EXEC sp_executesql @sql,@params
我有大约50,000条记录,因此决定使用Temp Table。但惊讶地发现这个错误。
我如何在SQL Azure中实现相同的目标?
编辑:阅读此博客http://blogs.msdn.com/b/sqlazure/archive/2010/05/04/10007212.aspx,建议我们在存储过程中创建一个表来存储数据而不是Temp表。在并发下安全吗?它会达到性能吗?
从http://blog.sqlauthority.com/2011/05/28/sql-server-a-quick-notes-on-sql-azure/
添加一些积分答案 0 :(得分:7)
SELECT INTO
是您在SQL Azure中无法执行的许多事情之一。
您需要做的是首先创建临时表,然后执行插入。类似的东西:
CREATE TABLE #itemSearch (ITEMNR INT, USERNR INT, IT.ShopNR INT, IT.ITEMID INT)
INSERT INTO #itemSearch
SELECT IT.ITEMNR, IT.USERNR, IT.ShopNR ,IT.ITEMID
FROM dbo.ITEM AS IT
答案 1 :(得分:5)
新的Azure DB Update preview已解决此问题:
V12预览使您可以创建没有群集的表 指数。此功能对于支持T-SQL特别有用 SELECT ... INTO语句,它根据查询结果创建表。
http://azure.microsoft.com/en-us/documentation/articles/sql-database-preview-whats-new/
答案 2 :(得分:2)
使用#
前缀创建表格,例如create table #itemsearch
然后使用insert into
。临时表的范围仅限于会话,因此不会出现并发问题。
答案 3 :(得分:-1)
好吧,我们都知道SQL Azure表必须有一个聚簇索引,这就是SELECT INTO将数据从一个表复制到另一个表失败的原因。 如果要迁移,则必须首先创建具有相同结构的表,然后执行INSERT INTO语句。 对于后跟#的临时表,您不需要创建索引。
how to create index and how to execute insert into for temp table?