相关疑难解决方法(0)

在PHP中插入和选择存储过程

我目前正在尝试通过PHP执行存储过程(两个INSERTS和一个SELECT).存储过程有效(不会抛出任何错误).甚至将值插入给定的表中.我们将结果存储在JSON对象中,但它返回一个空数组.当我们执行仅包含SELECT的存储过程时,它返回正确的值.我们的表中已经更改了所有名称(可能已经错过了一些但我们的代码运行).任何人都可以阐明为什么我们的阵列没有填充?

这是我们的存储过程

ALTER procedure 
As
BEGIN

INSERT INTO TABLE1
(Loan_ID, Doc_ID, Borrower_Name, Docs_Drawn, Funder, First_Payment, Interest_Rate, Loan_Amount)
Select Loan_ID, 
        (SELECT (COUNT(*)) FROM TABLE WHERE A.Loan_ID = Loan_ID) AS Doc_ID,
        Borrower ,[Date_Docs_Drawn]
      ,[Funder]
      ,[Payment_Date]
      ,[Interest_Rate]
      ,[Loan_Amount] from VIEW A

 INSERT INTO TABLE2
(Loan_ID, Submitted_By, Event_Class, Event_Type, Event_Date, Doc_ID)
SELECT A.[Loan_ID], 
    'Program' AS Submitted_By
    ,'Collateral' AS Event_Class
      , 'Outstanding' AS Event_Type
     , CURRENT_TIMESTAMP AS Event_Date 
     , Doc_ID                                       
  FROM TABLE1 AS A
  WHERE NOT (A.Loan_ID = ANY (SELECT Loan_ID FROM TABLE2))

    SELECT [Loan_ID],[Doc_ID],[Borrower_Name] …
Run Code Online (Sandbox Code Playgroud)

php sql sql-server json stored-procedures

6
推荐指数
1
解决办法
1256
查看次数

tsql事务

为了在事务中包装存储过程,我添加以下内容:

CREATE PROCEDURE [dbo].[P_ORD_InsertTextField]
    //PARAMS
AS
BEGIN
    BEGIN TRY
    BEGIN TRANSACTION

    //STP BODY

    COMMIT
    END TRY
    BEGIN CATCH
      IF @@TRANCOUNT > 0
         ROLLBACK

      DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
      SELECT @ErrMsg = ERROR_MESSAGE(),
             @ErrSeverity = ERROR_SEVERITY()

      RAISERROR(@ErrMsg, @ErrSeverity, 1)
    END CATCH
END
GO
Run Code Online (Sandbox Code Playgroud)

有没有更短的方式做同样的事情?这是"只是"处理事务的巨大代码块.

sql t-sql sql-server

5
推荐指数
1
解决办法
2341
查看次数

SQLServerException:为更新生成结果集

我正在尝试将新记录插入到MS SQL数据库中,并且我得到了一个我以前从未见过的异常​​.当我调用时executeUpdate抛出以下异常:

com.microsoft.sqlserver.jdbc.SQLServerException: A result set was generated for update.

这是产生错误的Java代码:

// addComment method adds a new comment for a given requestId
public CommentBean addComment(CommentBean comment) {
    PreparedStatement stmt = null;
    INative nat = null;
    Connection conn = null;

    try {
        nat = dbConn.retrieveNative();
        conn = (Connection)nat.getNative("java.sql.Connection");
        stmt = conn.prepareStatement(ADD_COMMENT);
        stmt.setInt(1, comment.getRequestId());
        stmt.setString(2, comment.getComment());
        stmt.setString(3, new SimpleDateFormat("MM/dd/yyyy").format(comment.getDateCreated()));
        stmt.setString(4, comment.getCreatedBy());
        comment.setCommentId(stmt.executeUpdate()); // exception
    } catch(Exception ex) {
        System.err.println("ProjectRegistration::SQLDAO - addComment");
        ex.printStackTrace();
    } finally {
        try {
            if (stmt != …
Run Code Online (Sandbox Code Playgroud)

java sql jdbc

5
推荐指数
2
解决办法
2万
查看次数

在应用程序中使用StoredProcs

我们正在设计企业应用程序,我们的技术架构师建议"让代码中没有sql查询.即使对数据库进行简单的select调用,也应该在数据库中为它编写存储过程代码应该调用它."

我的问题是,在整个代码中只有存储过程并且没有任何查询似乎是一个愚蠢的想法!我们的家伙对这个想法深信不疑,但我对此表示怀疑......你们有什么话要说?

如果它是一个好主意,我会喜欢它,如果有人能告诉我支持它的原因.

如果这是一个坏主意,请告诉我他们可以提出什么论点来说服他们.

感谢您的帮助.

thx -ksm

.net sql stored-procedures

3
推荐指数
2
解决办法
764
查看次数

全面更新存储过程以包括SET NOCOUNT ON的后果是什么

我们引入了一个用于调用SQL存储过程的新数据访问框架.当调用返回记录集的存储过程时,我们遇到了存储过程也执行某种更新(插入/更新/删除)的问题:

无法更改具有Command对象作为其源的Recordset对象的ActiveConnection属性.

解决方法是在存储过程的顶部添加"SET NOCOUNT ON".这很好用,当然,它也有一个吹捧性能增强.

我们建议开发人员,当他们想编写代码来调用现有的存储过程时,他们还必须重构存储过程本身以包含SET NOCOUNT ON.

但是,这让我想知道,对包括所有存储过程进行全面更新的潜在后果/风险是什么SET NOCOUNT ON.在什么情况下会破坏SP的功能?(假设即使SET NOCOUNT为ON,@@ ROWCOUNT函数也会更新)

一如既往的帮助,非常感谢.

sql t-sql sql-server nocount

3
推荐指数
1
解决办法
591
查看次数

如何解决“语句未返回结果集错误”?

当语句不返回结果集时,我正在尝试处理SQLServerException。我对Java还是很陌生,因此无法找到解决它的方法。请谁能建议我该如何解决错误?我遇到困难的地方是该存储过程未返回任何结果集,而我想显示“找不到记录”之类的内容。我该如何解决?

stmt = conn.prepareCall("{call p_GetAllowedPublicIPs(?,?,?)}");
Run Code Online (Sandbox Code Playgroud)
 @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //processRequest(request, response);
        PrintWriter out = response.getWriter();
        String IsLoginDisabled = null;
         String  BankID =null;
         String publicip=null;
        try {
          //processRequest(request, response);
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          Connection conn = null;
          CallableStatement myStmt = null;
          int count =0;

          conn = DriverManager.getConnection("jdbc:sqlserver://MPESA\\SQL2012;user=realm;password=friend;database=ElmaTest");

          if(conn!=null)
          {
              out.println("Connection Succcesful");
          myStmt = conn.prepareCall("{call sp_GetPortalUser(?,?,?)}");

                myStmt.setString("Country", "Kenya");
                myStmt.setString("BankName", "CS");
                myStmt.setString("UserID", "Frank");

               ResultSet rs= myStmt.executeQuery();
              while(rs.next())       
              {
                  count++;
                  BankID = rs.getString("BankID");
                  String employeeid= rs.getString("EmployeeID");
                  String FirstName = rs.getString("FirstName"); …
Run Code Online (Sandbox Code Playgroud)

java sql-server-2008

3
推荐指数
2
解决办法
1万
查看次数

如果存储过程在MSSQL服务器2005上的选择之前执行更新,则无结果集

有没有人知道为什么我不会得到结果集如果我在商店程序中的选择之前做更新.我正在运行MSSQL server 2005和最新的Microsoft JDBC驱动程序.

相关的java代码:

CallableStatement cstmt = con.prepareCall("{call dbo.sp_groups_select}");
if (cstmt.execute()) {
    while (cstmt.getResultSet().next())
Run Code Online (Sandbox Code Playgroud)

如果存储过程如下所示,则不会获得结果集:

CREATE PROCEDURE [dbo].[sp_groups_select] AS
update Computers set ComputerName='Foo'  where ComputerName='bar';
select * from Computers;
Run Code Online (Sandbox Code Playgroud)

但如果它看起来像这样我得到一个结果集

CREATE PROCEDURE [dbo].[sp_groups_select] AS
select * from Computers;
update Computers set ComputerName='Foo'  where ComputerName='bar';
Run Code Online (Sandbox Code Playgroud)

java sql-server stored-procedures jdbc

2
推荐指数
1
解决办法
1920
查看次数

JPA 2.0是否支持SQL Server表变量?

我正在使用JPA 2.0和SQL Server 2008,并且当我使用表变量时,我已经确定JPA不喜欢我的存储过程.

例如,这个sproc工作:

declare @t table
(
    id      int identity
,   test    varchar(50)
)

select 'blah' as test  -- I'm ignoring the table variable above
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试@t使用此代码将某些内容插入到表变量中时,它会崩溃:

declare @t table
(
    id      int identity
,   test    varchar(50)
)

insert into @t
    select cast(getdate() as varchar(60))

select * from @t
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872):    org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
Error Code: 0
Run Code Online (Sandbox Code Playgroud)

如果我可以帮助它,我不想重写我的复杂sprocs而不使用表变量.

谢谢你的任何建议.

stored-procedures sql-server-2008 jpa-2.0

2
推荐指数
1
解决办法
2737
查看次数

INSERT TRIGGER问题:"键列信息不足或不正确.更新会影响太多行."

我的TRIGGER遇到了一些问题:

CREATE TRIGGER "tblSettingTable_INSERT"
ON dbo.tblSettingTable
FOR INSERT
    AS

INSERT INTO dbo.tblSettingReportParameter (tableName, columnName, columnCaption)
SELECT   tableName = CAST(OBJECT_NAME(c.object_id) AS varchar(100)),
            columnName = CAST(c.name AS varchar(100)),
            columnCaption = CAST(ex.value AS varchar(100))
FROM        sys.columns c
LEFT OUTER JOIN sys.extended_properties ex
            ON ex.major_id = c.object_id 
            AND ex.minor_id = c.column_id  
            AND ex.name = 'MS_Caption'
INNER JOIN  inserted ON OBJECT_NAME(c.object_id) = inserted.tableName
WHERE      OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0  
         AND OBJECT_NAME(c.object_id) = inserted.tableName
Run Code Online (Sandbox Code Playgroud)

我正在尝试从表中获取一些列属性并将其插入dbo.tblSettingReportParameter但我将其抛向我的脸:"键列信息不足或不正确.更新会影响太多行."

我究竟做错了什么?使用MS-SQL 2008 RS.

谢谢,

斯特凡

ms-access triggers sql-server-2008

1
推荐指数
1
解决办法
1911
查看次数

使用GROUP BY更新触发器

我正在使用插入/更新触发器来更新第二个表的列Price.

插入触发器似乎工作得很好,但是当我尝试更改SSMS中的单个记录时,我收到一个错误:

更新或删除的行值不会使行唯一,也不会更改多行(2行).

这是我的更新触发器:

CREATE TRIGGER [dbo].[trgUpdateMasterData] ON [dbo].[tabSparePartMasterData_Temp]
AFTER UPDATE
AS

UPDATE    tabSparePart
SET      Price = MD.Price
FROM    tabSparePart INNER JOIN
(
    SELECT     inserted.[Material Number (SAP)] AS MaterialNumber, inserted.Price
    FROM          inserted
    GROUP BY [Material Number (SAP)], inserted.Price
) MD 
ON tabSparePart.SparePartName = MD.MaterialNumber
Run Code Online (Sandbox Code Playgroud)

我需要按Material-Number分组,因为有多余的行插入到表中tabSparePartMasterData_Temp,我只用于更新Sparepart-Price tabSparePart.但我假设小组将整理重复(任何重复的价格相同).

插入/更新的记录可能MaterialNumber不可用tabSparepart.在这种情况下,应该"跳过"此记录.是否INNER JOIN考虑到了这一点?

t-sql triggers group-by sql-server-2005

1
推荐指数
1
解决办法
1427
查看次数

使我的存储过程更有效

我已经为Select Query创建了一个存储过程,它工作正常.但我需要一些更有效的方法来制作我的SP查询.你有什么建议吗?

Create Procedure usp_SelectUserProfile
    @UserId int
As
Begin
     Select <column name> from DB where UserId = @UserId
End
Run Code Online (Sandbox Code Playgroud)

日Thnx

sql-server-2008

1
推荐指数
1
解决办法
528
查看次数

Visual Basic:无法从记录集中读取记录/数据.

这是我的代码:

Dim CompanyName, _
    CompanyDomain, _
    CompanyEmail, _
    CompanySupportPhone

Call GetEmailList

Sub GetEmailList
    dim sql
    dim companydata

    sql = ""
    sql = sql & " DECLARE @CompanyName VARCHAR(100);"
    sql = sql & " DECLARE @CompanyDomain VARCHAR(100);"
    sql = sql & " DECLARE @CompanyActivityEmail VARCHAR(100);"
    sql = sql & " DECLARE @CompanySupportPhone VARCHAR(100);"

    sql = sql & " SELECT"
        sql = sql & " @CompanyName = CASE WHEN Setting = 'CompanyName'"
        sql = sql & " THEN StringValue ELSE @CompanyName END," …
Run Code Online (Sandbox Code Playgroud)

sql vba recordset asp-classic

1
推荐指数
1
解决办法
1579
查看次数