Questions tagged «stored-procedures»

子例程可用于访问关系数据库系统的应用程序。



11
程序期望未提供的参数
在SQL Server中访问存储过程时出现错误 Server Error in '/' Application. Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied. 当我通过.net与sql的数据连接使用参数调用存储过程时(System.data.SqlClient),即使我提供了该参数,也会发生这种情况。这是我的代码。 SqlConnection sqlConn = new SqlConnection(connPath); sqlConn.Open(); //METADATA RETRIEVAL string sqlCommString = "QCApp.dbo.ColumnSeek"; SqlCommand metaDataComm = new SqlCommand(sqlCommString, sqlConn); metaDataComm.CommandType = CommandType.StoredProcedure; SqlParameter sp = metaDataComm.Parameters.Add("@template",SqlDbType.VarChar,50); sp.Value = Template; SqlDataReader metadr = …

6
SQL函数是否作为默认参数值?
我尝试使用以下方法更改默认参数值: ALTER PROCEDURE [dbo].[my_sp] @currentDate datetime = GETDATE() 而所有的SQL预编译器给我的都是这个错误: 消息102,级别15,状态1,过程my_sp,第8行'('附近的语法不正确。 我已经创建了过程。(我不确定这是否相关。)我使用的是空默认值,以后再检查它,但这似乎不合适。我可以一行完成吗? 更新:我不打算使用MSDN对存储过程参数的描述: [= default]是参数的默认值。如果定义了默认值,则无需指定该参数的值即可执行该函数。 注意: 可以为CLR函数指定默认参数值,但varchar(max)和varbinary(max)数据类型除外。 当函数的参数具有默认值时,在调用函数以检索默认值时必须指定关键字DEFAULT。此行为与在存储过程中使用具有默认值的参数不同,在存储过程中,省略参数也表示默认值。 我读错了吗? 非常感谢。

9
在SQL Server上插入更新存储的proc
我编写了一个存储的proc,如果有记录,它将进行更新,否则它将进行插入。看起来像这样: update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) 我以这种方式编写代码的逻辑是,更新将使用where子句执行隐式选择,如果返回0,则将进行插入。 用这种方法的替代方法是先进行选择,然后根据返回的行数进行更新或插入。我认为这种方法效率低下,因为如果要进行更新,则会导致2个选择(第一个显式的select调用和第二个隐式的update调用)。如果proc进行插入操作,则效率没有差异。 我的逻辑声音在这里吗?这是将插入和更新合并到存储过程中的方式吗?

17
如何用前导零将int转换为char?
我需要将int数据字段转换为前导零的nvarchar 例: 1转换为'001' 867转换为'000867'等 谢谢。 这是我4小时后的回复... 我测试了此T-SQL脚本,并为我正常工作! DECLARE @number1 INT, @number2 INT SET @number1 = 1 SET @number2 = 867 SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED 我创建了这个用户功能 T-SQL代码: CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20) …

3
在.NET中捕获存储过程的打印输出
是否可以从.NET中的T-SQL存储过程捕获打印输出? 我有很多使用打印作为errorMessaging手段的旧式proc。例如,是否可以从PROC之后访问出题的“单词”? -- The PROC CREATE PROC usp_PrintWord AS PRINT 'word' // Some C# Code to would like to pull out 'word' SqlCommand cmd = new SqlCommand("usp_printWord", TheConnection); cmd.CommandType = CommandType.StoredProcedure; // string ProcPrint = ???

6
从Web调用存储过程较慢,从Management Studio快速调用
我存储的过程在每次从Web应用程序中调用时都会疯狂地超时。 我启动了Sql Profiler,并跟踪了超时的调用,最后发现了这些东西: 在MS SQL Management Studio中使用相同的参数执行语句时(实际上,我从sql概要文件跟踪复制了过程调用并运行了它):平均在5到6秒内完成。 但是,当从Web应用程序调用时,它花费了超过30秒的时间(在跟踪中),因此我的网页到那时实际上已超时。 除了我的Web应用程序有其自己的用户外,每件事都是相同的(相同的数据库,连接,服务器等),我还尝试了直接在Studio中与该Web应用程序的用户一起运行查询,并且该查询不超过6个秒 我如何找出正在发生的事情? 我认为这与我们使用BLL> DAL层或表适配器这一事实无关,因为该迹线清楚地表明延迟是在实际过程中进行的。这就是我能想到的。 我在此链接中发现EDIT,ADO.NET设置ARITHABORT为true-在大多数情况下都很好,但有时会发生这种情况,建议的解决方法是将with recompile选项添加到存储的proc中。就我而言,它不起作用,但我怀疑它与此非常相似。有谁知道ADO.NET还有什么功能,或者在哪里可以找到该规范?

6
使用Oracle分页
我不像我想的那样熟悉Oracle。我有大约25万条记录,我希望每页显示100条。当前,我有一个存储过程,该过程使用数据适配器和数据集以及对存储过程结果的dataadapter.Fill(dataset)方法将一百万个记录的全部四分之一检索到数据集中。如果我可以将“页码”和“每页记录数”作为整数值,可以将其作为参数传递,那么最好的方法就是只获取该特定部分。假设,如果我将10作为页数传递,将120作为页数传递,则从select语句中获得的数值将是第1880至1200,或者类似的数字,我的脑海中可能已经关闭。 我正在使用C#在.NET中进行此操作,认为这并不重要,如果我可以在sql端正确使用它,那么我应该很酷。 更新:我能够使用Brian的建议,而且效果很好。我想进行一些优化,但是页面将​​在4到5秒而不是一分钟的时间内显示出来,并且我的分页控件能够很好地集成到我的新存储过程中。

4
T-SQL获取存储过程的SELECTED值
在T-SQL中,这是允许的: DECLARE @SelectedValue int SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 因此,可以获取SELECT的值并将其填充到变量中(显然,如果它是标量的)。 如果将相同的选择逻辑放入存储过程中: CREATE PROCEDURE GetMyInt AS SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 我可以获取此存储过程的输出并将其填充到变量中吗? 就像是: DECLARE @SelectedValue int SELECT @SelectedValue = EXEC GetMyInt (我知道上面的语法是不允许的,因为我尝试过!)

6
Oracle存储过程中的“ AS”和“ IS”有什么区别?
我看到Oracle过程有时用“ AS”编写,有时用“ IS”关键字编写。 CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **AS** ... 与 CREATE OR REPLACE Procedure TESTUSER.KILLINSTANCE (INSTANCEID integer) **IS** ... 两者之间有什么区别吗? 编辑:显然,两者之间没有功能上的区别,但是当SP是软件包的一部分时,有些人遵循约定使用“ AS”,而当软件包不是软件包时,则遵循“ IS”。或反过来。嗯


18
如何从Java和JPA调用存储过程
我正在编写一个简单的Web应用程序以调用存储过程并检索一些数据。它是一个非常简单的应用程序,可以与客户的数据库进行交互。我们传递员工ID和公司ID,存储过程将返回员工详细信息。 Web应用程序无法更新/删除数据,并且正在使用SQL Server。 我正在Jboss AS中部署Web应用程序。我应该使用JPA访问存储过程还是CallableStatement。在这种情况下使用JPA的任何优势。 调用该存储过程的sql语句也将是什么。我以前从未使用过存储过程,因此我为此感到吃力。Google并没有太大帮助。 这是存储过程: CREATE procedure getEmployeeDetails (@employeeId int, @companyId int) as begin select firstName, lastName, gender, address from employee et where et.employeeId = @employeeId and et.companyId = @companyId end 更新: 对于任何其他使用JPA调用存储过程有问题的人。 Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}", EmployeeDetails.class) .setParameter(1, employeeId) .setParameter(2, companyId); List<EmployeeDetails> result = query.getResultList(); 我注意到的事情: …

5
如何在存储过程中生成新的Guid?
我目前有一个存储过程,我想在其中向表中插入新行。 insert into cars (id, Make, Model) values('A new Guid', "Ford", "Mustang") 因此,主键“ id”是Guid。我知道如何用C#代码创建新的Guid,但是在存储过程中,我不确定如何为主键值生成新的Guid。

3
我可以在MySQL中使用参数创建视图吗?
我有这样的看法: CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = 2; 我想使其更通用,这意味着将2更改为变量。我尝试了这个: CREATE VIEW MyView AS SELECT Column FROM Table WHERE Value = @MyVariable; 但是MySQL不允许这样做。 我发现了一个丑陋的解决方法: CREATE FUNCTION GetMyVariable() RETURNS INTEGER DETERMINISTIC NO SQL BEGIN RETURN @MyVariable; END| 然后视图是: CREATE VIEW MyView AS SELECT Column FROM Table WHERE …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.