2017-03-29 12 views
1

私はこの文で除算演算子を適用しようとしていますが、それは誤りに'/'付近の構文が正しくありません。 SQL Serverの2012

付近に正しくない構文 '/' 私はSQL Server 2012の

(select count(distinct emploc) as test from location)/
(select count(emploc) from location) 
を使用しています

をスローします

+1

先頭に別のレベルの「SELECT」を追加します。 – dotNET

答えて

4

あなたは、式の前にselectが必要になります。

select ((select count(distinct emploc) as test from location)/
     (select count(emploc) from location) 
     ) 

SQLクエリはselectで始まります。いくつかのケースでは、(select . . .から始めることができます(union allを使用している場合など)。 SQLパーサーは算術式の汎用式パーサーではないため、select 2/1は機能しますが、2/1は機能しません。

1

あなたは、単一のクエリでそれを使用することができます

SELECT count(distinct emploc)/convert(float,count(emploc)) as Test from location 
0

それは、あなたが

select count(distinct emploc)/count(emploc) from location 
-1

のような単一のクエリでそれを作るカムものの、メッセージ102、レベル15をPROC を実行しながら、私はこのエラーを見つけた

以下
SELECT 
(select count(distinct emploc) as test from location)/(select count(emploc) from location) 

ようにする必要があります状態1、プロシージャproc1、行7 '('。 ここでスクリプトwher wkとddが不正確な構文を見つけました プロシージャproc1を作成します @name VARCHAR(50)、 - D @fileDate VARCHAR(256)、 - バックアップ・ファイルのパス @path VARCHAR(256)、 - バックアップ・ファイルのパス @databasepath VARCHAR(256)、 - バックアップ・ファイルのパス @fileName VARCHAR(256) - バックアップのファイル名 @fileDate VARCHAR 、 - ファイル名に使用 @DeleteDateBAK DATETIME = DATEADD(wk、-1、GETDATE())、 - カットオフの日付 @DeleteDateTRN DATETIME = DATEADD(dd、-2、GETDATE()); - カットオフ日付 DECLARE @name VARCHAR(50); - データベース名 DECLARE @path VARCHAR(256); - バックアップ・ファイルのパス DECLARE @databasepath VARCHAR(256); - バックアップ・ファイルのパス DECLARE @fileName VARCHAR(256); - バックアップのファイル名 DECLARE @fileDate VARCHAR(200); - ファイル名に使用 DECLARE @DeleteDateBAK DATETIME = DATEADD(wk、-1、GETDATE()); - カットオフ日付 DECLARE @DeleteDateTRN DATETIME = DATEADD(dd、-2、GETDATE()); - カットオフの日付

- バックアップへのパス。 SET @path = 'G:\ backup \ DXC_bkp_plan &メンテナンス\';

- ファイル名に含める日付を取得します。 SELECT @fileDate = REPLACE(置換(置換)(VARCHAR(20)、GETDATE()、120)、 ' - '、 '')、 ''、 '')、 ':'、 '') SET @fileDate = @fileDate + '_'SET @fileDate = @fileDate +(CONVERT(VARCHAR(200)、ABS CONVERT(BIGARY、CONVERT(BINARY(8)、NEWID())))%)10000000))

- サーバー上の各データベースを動的に取得します。 DECLARE db_cursor CURSOR FOR SELECT名 FROM master.sys。データベース「WHERE name 'NOT'( 'master'、 'model'、 'msdb'、 'tempdb'、 'ApexSQLBackupCentralRepository'、 'C​​areer_Progression'、 'C​​ensusDB'、 'C​​ONTECTUAL'、 'C​​ONTROL'、 'DASHBOARD'、 'DAY_DASHBOARD' 「DGET_DWH」「DH」「Dummy_DS」「GOA」「GoogleAnalytics」「INSTDB」「Mig」「Migrated」「Qual」「RND」「dbdgetEnglishForHP-CMS」「DGET_DWH」「RND」 、 'TripuraNCS'、 'Test');

OPEN db_cursor; db_cursorの次のFETCH INTO @name;

- リストをループして各データベースをバックアップします。 WHILE @@ FETCH_STATUS = 0 BEGIN - パスとファイル名を作成します。 SET @databasepath = @path + @name + N '\'; SET @fileName = @databasepath + @name + 'バックアップ' + @fileDate + '.BAK';

EXEC master.dbo.xp_create_subdir @databasepath 

    -- Backup the database. 
    BACKUP DATABASE @name TO DISK = @fileName WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10; 

    -- Purge old backup files from disk. 
    EXEC master.sys.xp_delete_file 0,@path,'BAK',@DeleteDateBAK,1; 
    EXEC master.sys.xp_delete_file 0,@path,'TRN',@DeleteDateTRN,1; 

    -- Loop to the next database. 
    FETCH NEXT FROM db_cursor INTO @name; 

終了 - クリーンアップ。 CLOSE db_cursor; DEALLOCATE db_cursor;

関連する問題