0

SQL Server 2008上でDotNetNukeを使用しています。次のコードがNULL値を返す場合、何も返さないようにしています。空の行は必要ありません。「null」は必要ありません。絶対に何も必要ありません。これも可能ですか?COALESCEを使用してみましたが、何かが足りないか、この目的を意図したものではありません。

DECLARE @Category table (Category varchar(15), Deleted bit)

INSERT INTO @Category (Category, Deleted)
SELECT 'Benefits', 0
UNION ALL
SELECT 'UR', 0
UNION ALL
SELECT 'Events', 1

DECLARE @Staff Table (DNNUserID int, InternalStaff bit, 
Deleted bit, InactiveStaff bit)

INSERT INTO @Staff (DNNUserID, InternalStaff, Deleted, InactiveStaff)
SELECT '556', 1, 0, 0
UNION ALL
SELECT '423', 0, 0, 0
UNION ALL
SELECT '111', 1, 0, 1
UNION ALL
SELECT '222', 1, 1, 0

SELECT Category FROM @Category WHERE Deleted = 0
UNION ALL
SELECT CASE WHEN '111' IN 
    (SELECT DnnUserID FROM @Staff WHERE Deleted = 0 AND 
    InactiveStaff = 0 AND InternalStaff = 1) 
    THEN 'Internal Use Only' 
ELSE NULL END

変数テーブルは、使いやすさのためにここにあります。実際に操作する必要がある、ほぼ同じ名前の2つの実際のテーブルがあります。

ストアドプロシージャを使用してこれらのアクションを実行することはできません。使用しているtelerikコントロールがそれを理解できるように、単純なselectステートメントまたはスカラーUDFである必要があります。

DNNの実際のバックグラウンドに直接アクセスすることはできず(したがって、DNNまたはTelerikのコードを編集することはできません)、サーバーだけにアクセスでき、プライマリDNNWebインターフェイスを介してのみTelerikコントロールにselectステートメントを追加できます。

個人が私が働いている会社の内部メンバーである場合、カテゴリテーブルのメインリストに加えて、ドロップダウンに「内部使用のみ」というエントリが表示されるという考え方です。他の誰かがそれを使用する場合、たとえば、クライアントのスタッフの1人は、カテゴリのリストのみを表示します。

これは実行可能ですか?ライブシステムでテストする方法がないため、現時点では機能を使用しないようにしています(今日は自宅で作業しており、VPNがダウンしています)が、必要に応じて自宅でテストできます。上記のSQLを使用したデータベース。

編集

これを関数で大まかに使用できます。

DECLARE @DNNUserID int = 111

DECLARE @Category table (Category varchar(15), Deleted bit)

INSERT INTO @Category (Category, Deleted)
SELECT 'Benefits', 0
UNION ALL
SELECT 'UR', 0
UNION ALL
SELECT 'Events', 1

DECLARE @Staff Table (DNNUserID int, InternalStaff bit, Deleted bit, 
InactiveStaff bit)

INSERT INTO @Staff (DNNUserID, InternalStaff, Deleted, InactiveStaff)
SELECT '556', 1, 0, 0
UNION ALL
SELECT '423', 0, 0, 0
UNION ALL
SELECT '111', 1, 0, 1
UNION ALL
SELECT '222', 1, 1, 0

IF @DNNUserID NOT IN (SELECT DnnUserID FROM @Staff WHERE Deleted = 0 
AND InactiveStaff = 0 AND InternalStaff = 1)
    BEGIN
        SELECT Category FROM @Category WHERE Deleted = 0
    END
IF @DNNUserID IN (SELECT DnnUserID FROM @Staff WHERE Deleted = 0 
AND InactiveStaff = 0 AND InternalStaff = 1)
    BEGIN
        SELECT Category FROM @Category WHERE Deleted = 0
        UNION ALL
        SELECT 'Internal Use Only'
    END

だが!関数に頼らずにこれを行う方法を見つけたいのですが、これは可能ですか?

4

2 に答える 2

1

これはあなたのために働くかもしれません。EXISTSは、あなたがやろうとしていることに合うように聞こえます。

DECLARE @Category table (Category varchar(15), Deleted bit)

INSERT INTO @Category (Category, Deleted)
SELECT 'Benefits', 0
UNION ALL
SELECT 'UR', 0
UNION ALL
SELECT 'Events', 1

DECLARE @Staff Table (DNNUserID int, InternalStaff bit, 
Deleted bit, InactiveStaff bit)

INSERT INTO @Staff (DNNUserID, InternalStaff, Deleted, InactiveStaff)
SELECT '556', 1, 0, 0
UNION ALL
SELECT '423', 0, 0, 0
UNION ALL
SELECT '111', 1, 0, 1
UNION ALL
SELECT '222', 1, 1, 0

SELECT Category FROM @Category WHERE Deleted = 0
UNION ALL

SELECT 'Internal Use Only'
WHERE EXISTS
    (
    SELECT 1 
    FROM @Staff
    WHERE Deleted = 0 AND 
      InactiveStaff = 0 AND 
      InternalStaff = 1 AND
      DNNUserID = 111
    )
于 2013-02-08T20:26:54.180 に答える
1
DECLARE @Category table (Category varchar(15), Deleted bit)

INSERT INTO @Category (Category, Deleted)
SELECT 'Benefits', 0
UNION ALL
SELECT 'UR', 0
UNION ALL
SELECT 'Events', 1

DECLARE @Staff Table (DNNUserID int, InternalStaff bit, 
Deleted bit, InactiveStaff bit)

INSERT INTO @Staff (DNNUserID, InternalStaff, Deleted, InactiveStaff)
SELECT '556', 1, 0, 0
UNION ALL
SELECT '423', 0, 0, 0
UNION ALL
SELECT '111', 1, 0, 1
UNION ALL
SELECT '222', 1, 1, 0

SELECT Category FROM @Category WHERE Deleted = 0
UNION ALL
Select * from
(
SELECT CASE WHEN '111' IN 
    (SELECT DnnUserID FROM @Staff WHERE Deleted = 0 AND 
    InactiveStaff = 0 AND InternalStaff = 1) 
    THEN 'Internal Use Only' 
ELSE NULL END as ARow
) a 
where ARow is not null
于 2013-02-08T20:22:27.497 に答える