【问题标题】:'Dynamic' Stored Procedure“动态”存储过程
【发布时间】:2013-12-20 17:55:48
【问题描述】:

我对存储过程很陌生,需要一些帮助。

我正在尝试创建一个“动态”存储过程。当参数为NOT NULL 时,应添加 SQL 的某个部分。这是我迄今为止所拥有的。

    SELECT        
    TCId, 
    ENVId, 
    UId, 
    MTId, 
    TestSetName, 
    TestCaseName, 
    InterchangeSeqNo, 
    InstructionSeqNo, 
    TransactionSeqNo, 
    TestCaseDescription
FROM XML_TEST_SET_OVERVIEW
WHERE (ENVId = @MyENVId)
SELECT CASE @MyUId 
    WHEN IS NOT NULL THEN (AND UId = @MyUId)
END
SELECT CASE @MyMTId
    WHEN IS NOT NULL THEN (AND MTId = @MyMTId)
END
SELECT CASE @MyTestSetName
    WHEN IS NOT NULL THEN (AND TestSetName = @MyTestSetName) 
END
SELECT CASE @MyTestCaseName
    WHEN  IS NOT NULL THEN  (AND TestCaseName = @MyTestCaseName) 
END
SELECT CASE @MyInterchangeSeqNo
    WHEN  IS NOT NULL THEN  (AND InterchangeSeqNo = @MyInterchangeSeqNo) 
END
SELECT CASE @MyInstructionSeqNo
    WHEN  IS NOT NULL THEN (AND InstructionSeqNo = @MyInstructionSeqNo) 
END
SELECT CASE @MyTransactionSeqNo
    WHEN  IS NOT NULL THEN (AND TransactionSeqNo = @MyTransactionSeqNo)
END  
ORDER BY ENVId, UId, MTId, TestSetName, TestCaseName, InterchangeSeqNo, InstructionSeqNo, TransactionSeqNo

感谢任何帮助

【问题讨论】:

标签: stored-procedures sql-server-2012


【解决方案1】:

这里我得猜数据类型,多余的部分我让你填写。

DECLARE @sql NVARCHAR(MAX) = N'SELECT ... 
  FROM dbo.XML_TEST_SET_OVERVIEW -- always use schema prefix
  WHERE ENVId = @MyENVId'

    + CASE WHEN @MyUId IS NOT NULL THEN 
           N' AND UId = @MyUId' ELSE '' END
    + CASE WHEN @MyMTId IS NOT NULL THEN 
           N' AND MTId = @MyMTId' ELSE '' END
    + CASE WHEN @MyTestSetName IS NOT NULL THEN 
           N' AND TestSetName = @MyTestSetName' ELSE '' END 
      ...
    + CASE WHEN @MyTransactionSeqNo IS NOT NULL THEN
           N' AND TransactionSeqNo = @MyTransactionSeqNo' ELSE '' END

    + N' ORDER BY ENVId, UId, ...;';

EXEC sp_executesql @sql, 
    N'@MyENVId INT, @MyUId INT, @MyMTId INT, 
      @MyTestSetName NVARCHAR(32), ... , @MyTransactionSeqNo INT',
    @MyENVId, @MyUId, @MyMTId, @MyTestSetName, ... , @MyTransactioNSeqNo;

【讨论】:

  • 谢谢亚伦。你帮了我很大的忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
相关资源
最近更新 更多