私は得ています
ステートメント'SELECTINTO'は、SQLServerのこのバージョンのSQLServerではサポートされていません。
ストアドプロシージャ内の以下のクエリの場合
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件のレコードがあるので、TempTableを使用することにしました。しかし、このエラーを見て驚いた。
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/から取得したいくつかのポイントを追加します
- 各テーブルには、クラスター化インデックスが必要です。クラスタ化インデックスのないテーブルはサポートされていません。
- 各接続は単一のデータベースを使用できます。1つのトランザクションでの複数のデータベースはサポートされていません。
- 「USEDATABASE」はAzureでは使用できません。
- グローバル一時テーブル(または一時オブジェクト)はサポートされていません。
- 相互データベース接続の概念がないため、現時点では、リンクサーバーはAzureの概念ではありません。
- SQL Azureは共有環境であり、同じため、Windowsログインの概念はありません。
- TempDBに圧力がかかるため、TempDBオブジェクトは必要に応じて必ず削除してください。
- 降圧挿入中にbatchsizeオプションを使用して、挿入される行数を制限します。これにより、トランザクションログスペースの使用が制限されます。
- ハイエンドのメモリ使用量につながるため、操作によるORDERのグループ化またはブロックの不要な使用は避けてください。