我正进入(状态
在此版本的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,建议我们在存储过程中创建一个表来存储数据而不是临时表。并发安全吗?它会影响性能吗?
添加从http://blog.sqlauthority.com/2011/05/28/sql-server-a-quick-notes-on-sql-azure/获得的一些点
每个表必须具有聚簇索引。不支持没有聚集索引的表。
每个连接可以使用单个数据库。不支持单个事务中的多个数据库。
“ USE DATABASE”不能在Azure中使用。
不支持全局临时表(或临时对象)。
由于没有跨数据库连接的概念,因此目前Azure中还没有链接服务器的概念。
SQL Azure是共享环境,由于相同,因此没有Windows登录的概念。
始终在需要时丢弃TempDB对象,因为它们会对TempDB造成压力。
在buck插入期间,使用batchsize选项限制要插入的行数。这将限制事务日志空间的使用。
避免对操作进行分组或阻塞ORDER的不必要使用,因为它们会导致高端内存使用。
最佳答案
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