Как я могу написать предложение CASE в SQL Server 2005? - PullRequest
0 голосов
/ 06 июня 2011

Как я могу написать предложение CASE в SQL Server 2005? это ошибки Вот мой код:

CASE @accesslevel 
        WHEN 'Order' THEN 
            INSERT INTO Permissions(UserAccountID,PrintOrder) 
            VALUES(@userid,1)

        WHEN 'Cashier' THEN 
            INSERT INTO Permissions(UserAccountID,PrintInvoice,SaveAndClear)
            VALUES(@userid,1,1) 

        WHEN 'Supervisor' THEN 
            INSERT INTO Permissions(UserAccountID,TableOperation,
                ExchangeRate,SaleReport,Section,Category,
                MenuItem,DeleteOrder,DeleteOneItem,MergeTable,
                SplitTable,PrintInvoice,PrintOrder,CalculateChange,
                SaveAndClea)
            VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1) 

        WHEN 'Manager' THEN 
            INSERT INTO Permissions(UserAccountID,TableOperation,
                ExchangeRate,SaleReport,Section,Category,
                MenuItem,DeleteOrder,DeleteOneItem,MergeTable,
                SplitTable,PrintInvoice,PrintOrder,CalculateChange,
                SaveAndClear,DailyIncome)
            VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) 

        ELSE 
            INSERT INTO Permissions(UserAccountID,TableOperation,
                ExchangeRate,TablePicture,SaleReport,DailyIncome,
                Section,Category,MenuItem, UserAccount,UserPermission,
                StaffManagement,DeleteOrder,DeleteOneItem,MergeTable,
                SplitTable,PrintInvoice,PrintOrder,CalculateChange,
                SaveAndClear)
            VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
    END CASE

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Я не думаю, что вы можете использовать оператор CASE для выполнения некоторых действий (вставки, обновления ...), он используется для вычисления выражений.Вы можете использовать IF..ELSE оператор:

IF @accesslevel = 'Order'
    INSERT INTO Permissions(UserAccountID,PrintOrder) 
    VALUES(@userid,1)

ELSE IF @accesslevel = 'Cashier'
      INSERT INTO Permissions(UserAccountID,PrintInvoice,SaveAndClear)
      VALUES(@userid,1,1)

     ELSE IF @accesslevel = 'Supervisor'
           INSERT INTO Permissions(UserAccountID,TableOperation,
             ExchangeRate,SaleReport,Section,Category,
             MenuItem,DeleteOrder,DeleteOneItem,MergeTable,
             SplitTable,PrintInvoice,PrintOrder,CalculateChange,
             SaveAndClea)
           VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1) 

          ELSE IF @accesslevel = 'Manager'
                INSERT INTO Permissions(UserAccountID,TableOperation,
                    ExchangeRate,SaleReport,Section,Category,
                    MenuItem,DeleteOrder,DeleteOneItem,MergeTable,
                    SplitTable,PrintInvoice,PrintOrder,CalculateChange,
                    SaveAndClear,DailyIncome)
                VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) 

               ELSE
                INSERT INTO Permissions(UserAccountID,TableOperation,
                    ExchangeRate,TablePicture,SaleReport,DailyIncome,
                    Section,Category,MenuItem, UserAccount,UserPermission,
                    StaffManagement,DeleteOrder,DeleteOneItem,MergeTable,
                    SplitTable,PrintInvoice,PrintOrder,CalculateChange,
                    SaveAndClear)
                VALUES(@userid,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
1 голос
/ 06 июня 2011

Выражения CASE предназначены для использования внутри выражений SQL Server, например:

SELECT CASE WHEN 1 = 1 THEN 'Yes' ELSE 'No' END

То, что вы пытаетесь сделать выше (условно выполняемые операторы или блоки операторов), должно быть сделано с помощью IF / ELSE (опционально, используя BEGIN и END для включения нескольких операторов).

Мы часто / обычно говорим «Оператор регистра», но на самом деле правильным термином является «Выражение регистра», поскольку они используются в выражениях , в выражениях (msdn ref: http://msdn.microsoft.com/en-us/library/ms181765.aspx).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...