Tag: 存储过程

用返回值调用存储过程

我想从我的C#窗口应用程序调用存储过程。 存储过程在SQL Server 2008的本地实例上运行。我能够调用存储过程,但是我无法从存储过程中取回值。 这个存储过程应该返回序列中的下一个数字。 我在网上做了研究,所有我见过的网站都指出了这个解决scheme的工作原理。 存储过程代码: ALTER procedure [dbo].[usp_GetNewSeqVal] @SeqName nvarchar(255) as begin declare @NewSeqVal int set NOCOUNT ON update AllSequences set @NewSeqVal = CurrVal = CurrVal+Incr where SeqName = @SeqName if @@rowcount = 0 begin print 'Sequence does not exist' return end return @NewSeqVal end 调用存储过程的代码: SqlConnection conn = new SqlConnection(getConnectionString()); conn.Open(); SqlCommand […]

使用postgresql存储过程将查询结果存储在variables中

如何使用postgresql存储过程将查询结果存储在variables中 我有一个存储过程 CREATE OR REPLACE FUNCTION test(x numeric) RETURNS character varying AS $BODY$ DECLARE name character varying(255); begin name ='SELECT name FROM test_table where id='||x; if(name='test')then –do somthing else –do the eles part end if; end; return — return my process result here $BODY$ LANGUAGE plpgsql VOLATILE 在上面的过程中,我需要存储 'SELECT name FROM test_table where id='||id; 这个查询将结果返回给variables名称 […]

我可以在存储过程中使用可选的OUTPUT参数吗?

我有一个存储过程有一堆input和输出参数,因为它是插入值到多个表。 在某些情况下,存储的proc只能插入到一个表(取决于input参数)。 这是一个嘲弄的场景来说明。 表/数据对象: 人 Id Name Address 名称 Id FirstName LastName 地址 Id Country City 说我有一个插入一个人的存储过程。 如果地址不存在,我不会将其添加到数据库中的Address表中。 因此,当我生成的代码来调用存储过程,我不想打扰添加Address参数。 对于INPUT参数,这是可以的,因为SQL Server允许我提供默认值。 但是对于OUTPUT参数我该怎么做在存储过程,使其可选,所以我没有收到错误… 过程或函数'Person_InsertPerson'需要参数'@AddressId',它没有提供。

EXECUTE权限在用户定义的表types上被拒绝?

我有一个关于SQL Server 2008中的用户定义表types的问题。 对于需要其中一个ASP.NET应用程序,我们在SQL Server 2008上定义了我们自己的表types,将它们用作存储过程中的参数(当在ASP.NET应用程序中执行sql命令时,我们将DataTable对象作为parameter passing给存储过程看这里的例子 ) 问题是,当我们从ASP.NET运行Sql命令(执行存储过程)时,我们得到一个错误: EXECUTE权限在对象“ourTableType”,数据库“ourDatabase”,模式“ourSchema”上被拒绝。 为什么? 为什么我们需要为用户定义的表types设置权限? 为什么仅仅在使用它的存储过程上设置权限是不够的? 如果我们必须设置它,为什么没有EXECUTE权限types设置属性窗口什么(我只能看到Control , References ,取得Take Ownership , View Definition )? 我也不明白的是,在属性窗口中设置权限Control解决了问题,存储过程运行没有问题。

如何比较可能都为null的值是T-SQL

我想确保我没有插入重复行到我的表(例如只有主键不同)。 我所有的领域都允许NULLS,因为我已经决定为“所有的价值”。 由于空值,我的存储过程中的以下语句无法工作: IF EXISTS(SELECT * FROM MY_TABLE WHERE MY_FIELD1 = @IN_MY_FIELD1 AND MY_FIELD2 = @IN_MY_FIELD2 AND MY_FIELD3 = @IN_MY_FIELD3 AND MY_FIELD4 = @IN_MY_FIELD4 AND MY_FIELD5 = @IN_MY_FIELD5 AND MY_FIELD6 = @IN_MY_FIELD6) BEGIN goto on_duplicate END 因为NULL = NULL是不正确的。 我怎样才能检查重复没有每个列IF IF NULL语句?

存储过程与Vs. 查看

我已经使用了两个,但我不清楚的是,当我更喜欢一个在另一个。 我的意思是我知道存储过程可以采取参数…但我们真的可以仍然执行相同的事情使用视图太对了? 所以考虑性能和其他方面的时候,为什么我应该更喜欢一个呢?

如何将一个执行结果分配给一个SQLvariables?

如何将SQL调用的结果分配给SQL中的variables? 我有一个名为up_GetBusinessDay的存储up_GetBusinessDay ,它返回一个date。 你可以做这样的事情: exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

entity framework存储过程表值参数

我试图调用一个接受表值参数的存储过程。 我知道,这不是直接支持在entity framework,但从我的理解,你可以使用ExecuteStoreQuery命令closures的ObjectContext 。 我有一个通用的entity framework库,我有以下ExecuteStoredProcedure方法: public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters) { StringBuilder command = new StringBuilder(); command.Append("EXEC "); command.Append(procedureName); command.Append(" "); // Add a placeholder for each parameter passed in for (int i = 0; i < parameters.Length; i++) { if (i > 0) command.Append(","); command.Append("{" + i + "}"); } return […]

当前正在执行过程名称

是否有可能在MS SQL Server中获得当前存储过程的名称? 可能有任何系统variables或函数像GETDATE() ?

SQL Server以静默方式截断存储过程中的varchar

根据这个论坛讨论 ,SQL Server(我正在使用2005年,但我收集这也适用于2000年和2008年)静默截断任何指定为存储过程参数的varchar到varchar的长度,即使插入该string直接使用INSERT实际上会导致错误。 例如。 如果我创build这个表格: CREATE TABLE testTable( [testStringField] [nvarchar](5) NOT NULL ) 那么当我执行以下: INSERT INTO testTable(testStringField) VALUES(N'string which is too long') 我收到一个错误: String or binary data would be truncated. The statement has been terminated. 大。 数据完整性保存,主叫方知道。 现在让我们定义一个存储过程来插入: CREATE PROCEDURE spTestTableInsert @testStringField [nvarchar](5) AS INSERT INTO testTable(testStringField) VALUES(@testStringField) GO 并执行它: EXEC spTestTableInsert @testStringField = N'string […]