2017-11-23 8 views
0
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[GET_ACTS_RULES_LIST_FOR_CLIENTS] 
    (@ACTS_FOR_CLIENTS) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM DCMREPOSITORYV1..ACTS 
    WHERE NAME IN (SELECT NAME FROM ACTS_FOR_CLIENTS) 

    SELECT * 
    FROM COMPLIANCE_FOR_CLIENTS 
    WHERE ACTSID IN (SELECT ID 
        FROM ACTS_FOR_CLIENTS 
        WHERE NAME IN (SELECT NAME FROM ACTS_FOR_CLIENTS)) 
    ORDER BY COMPLIANCE_CATEGORY_ID, ACTSID 

    SELECT * 
    FROM STATE_CENTRAL_RULE_FOR_CLIENTS 
    WHERE ACTSID IN (SELECT ID 
        FROM DCMREPOSITORYV1..ACTS 
        WHERE Name IN (SELECT NAME FROM ACTS_FOR_CLIENTS)) 
    ORDER BY COMPLIANCE_CATEGORY_ID, ACTSID 
END 
+0

ENDがありますが、同じエラーが発生しています。 –

+1

パラメータに型がありません。 –

+0

正しい構文は、テーブルタイプを作成することです。そうでなければ、可変文字列を宣言し、代わりに文字列として使用します。 – plaidDK

答えて

0

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql +は型の可変@ACTS_FOR_CLIENTSを追加する必要があります() `tのCREATE PROCEDUREを

USE [TESTING] 
    GO 

    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE PROCEDURE [dbo].[GET_ACTS_RULES_LIST_FOR_CLIENTS] @ACTS_FOR_CLIENTS VARCHAR(255) 
    AS 
    BEGIN 
SET NOCOUNT ON; 
DECLARE @SQL VARCHAR(MAX) 
SET @SQL = 'SELECT * FROM DCMREPOSITORYV1..ACTS WHERE NAME IN (SELECT NAME FROM '[email protected]_FOR_CLIENTS+')';  
SET @SQL = @SQL + 'SELECT * FROM COMPLIANCE_FOR_CLIENTS WHERE ACTSID IN (SELECT ID FROM ' + @ACTS_FOR_CLIENTS +' WHERE NAME IN (select NAME from ' + @ACTS_FOR_CLIENTS + ')) ORDER BY COMPLIANCE_CATEGORY_ID,ACTSID '; 

SET @SQL = @SQL + 'SELECT * FROM STATE_CENTRAL_RULE_FOR_CLIENTS WHERE ACTSID IN (SELECT ID FROM DCMREPOSITORYV1..ACTS WHERE Name IN (select NAME from ' + @ACTS_FOR_CLIENTS +')) ORDER BY COMPLIANCE_CATEGORY_ID,ACTSID'; 

EXEC(@SQL); 
+0

BEGINのエラーを示す()を取り除くことによって –

+0

@ACTS_FOR_CLIENTSをタイプしますか? –

+0

この変数の使い方(@ACTS_FOR_CLIENTS)? –

0

修正してみてください。

CREATE PROCEDURE [dbo].[GET_ACTS_RULES_LIST_FOR_CLIENTS] 
@ACTS_FOR_CLIENTS ACTS_FOR_CLIENTS readonly 
    AS 
    BEGIN 
SET NOCOUNT ON 

SELECT * FROM DCMREPOSITORYV1..ACTS WHERE NAME IN (SELECT NAME FROM ACTS_FOR_CLIENTS) 

SELECT * FROM COMPLIANCE_FOR_CLIENTS WHERE ACTSID IN (SELECT ID FROM ACTS_FOR_CLIENTS WHERE NAME IN (select NAME from ACTS_FOR_CLIENTS)) 
ORDER BY COMPLIANCE_CATEGORY_ID,ACTSID 
SELECT * FROM STATE_CENTRAL_RULE_FOR_CLIENTS WHERE ACTSID IN (SELECT ID FROM DCMREPOSITORYV1..ACTS WHERE Name IN (select NAME from ACTS_FOR_CLIENTS)) 
ORDER BY COMPLIANCE_CATEGORY_ID,ACTSID 

END 

訂正:

宣言されたユーザー定義のテーブルが無効です@ACTS_FOR_CLIENTS

+0

@ACTS_FOR_CLIENTSはテーブルです。それはプロシージャにテーブルを渡すための正しい構文ですか? –

+0

@CharchitaWashimkarはそれを '@ACTS_FOR_CLIENTS ACTS_FOR_CLIENTS readonly' –

+0

@CharchitaWashimkarで渡します。'ストアドプロシージャのユーザ定義のテーブル型 'について学ぶべきです..... http://www.c-sharpcorner.com/blogs/userdefined-ストアドプロシージャ・コード・イン・コード・イン・コード・ビハインド・ファイルを削減するテーブル・タイプおよびテーブル値のパラメータ・イン・ストア・プロシージャ –

関連する問題