标签: stored-procedures

Entity Framework Code First是否支持存储过程?

我已经看了几次EF Code First的演示,还没有看到EFCF如何与存储过程一起工作.

如何声明一个将使用某些sp的方法?我是否可以将实体传递给调用sp的方法,而无需手动将实体属性映射到sp参数?

另外,如果我改变模型会发生什么?它会在从模型中重新创建表格时丢失我的sp吗?触发器呢?

如果不支持这些东西,是否有计划在将来支持它们?

c# stored-procedures entity-framework code-first

112
推荐指数
4
解决办法
9万
查看次数

使用PL/pgSQL将查询结果存储在变量中

如何将查询结果分配给PL/pgSQL中的变量,这是PostgreSQL的过程语言?

我有一个功能:

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 else part
 end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

在上面的函数中我需要存储此查询的结果:

'SELECT name FROM test_table where id='||x;
Run Code Online (Sandbox Code Playgroud)

到变量name.

怎么处理这个?

database postgresql stored-procedures plpgsql postgresql-9.1

108
推荐指数
3
解决办法
18万
查看次数

一般而言,存储过程是否比现代RDBMS上的内联语句更有效?

传统观点认为存储过程总是更快.所以,因为他们总是更快,使用它们所有的时间.

我很确定这是基于历史背景,曾经是这种情况.现在,我并不主张不需要存储过程,但我想知道在现代数据库(如MySQL,SQL Server,Oracle或< Insert_your_DB_here >)中存储过程在什么情况下是必需的.通过存储过程进行ALL访问是否过度?

sql database stored-procedures

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

C#SQL Server - 将列表传递给存储过程

我从我的C#代码调用SQL Server存储过程:

using (SqlConnection conn = new SqlConnection(connstring))
{
   conn.Open();
   using (SqlCommand cmd = new SqlCommand("InsertQuerySPROC", conn))
   {
      cmd.CommandType = CommandType.StoredProcedure;

      var STableParameter = cmd.Parameters.AddWithValue("@QueryTable", QueryTable);
      var NDistanceParameter = cmd.Parameters.AddWithValue("@NDistanceThreshold", NDistanceThreshold);
      var RDistanceParameter = cmd.Parameters.AddWithValue(@"RDistanceThreshold", RDistanceThreshold);

      STableParameter .SqlDbType = SqlDbType.Structured;
      NDistanceParameter.SqlDbType = SqlDbType.Int;
      RDistanceParameter.SqlDbType = SqlDbType.Int;

      // Execute the query
      SqlDataReader QueryReader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我的存储过程是相当标准的但是加入了QueryTable(因此需要使用存储过程).

现在:我想List<string>在参数集中添加一个字符串列表.例如,我的存储过程查询如下所示:

SELECT feature 
FROM table1 t1 
INNER JOIN @QueryTable t2 ON t1.fid = t2.fid 
WHERE title IN <LIST_OF_STRINGS_GOES_HERE>
Run Code Online (Sandbox Code Playgroud)

但是,字符串列表是动态的,几百长.

有没有办法将字符串列表传递List<string> …

c# sql stored-procedures

105
推荐指数
3
解决办法
17万
查看次数

如何在sql server数据库中搜索字符串?

我知道这是可能的,但不知道如何.

我需要在Microsoft SQL数据库中搜索特定字符串的所有提及.例如:我想搜索所有表,视图,函数,存储过程,...字符串"tblEmployes".(不是表格中的数据)

我需要这个的原因之一,我想删除一些创建的额外数据表,但我担心它们可能在程序或函数中的某个地方使用.

任何帮助表示赞赏.

sql-server search stored-procedures function

104
推荐指数
7
解决办法
32万
查看次数

过程需要未提供的参数

我在访问SQL Server中的存储过程时遇到错误

Server Error in '/' Application.
Procedure or function 'ColumnSeek' expects parameter '@template', which was not supplied. 
Run Code Online (Sandbox Code Playgroud)

当我通过.net的数据连接调用带有参数的存储过程时(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 = metaDataComm.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我的存储过程是:

   USE [QCApp]
   GO
   SET ANSI_NULLS ON
   GO
   SET QUOTED_IDENTIFIER ON
   GO

   ALTER PROCEDURE [dbo].[ColumnSeek] 
       @template varchar(50)
   AS
   EXEC('SELECT Column_Name, Data_Type 
   FROM [QCApp].[INFORMATION_SCHEMA].[COLUMNS] 
   WHERE TABLE_NAME = ' …
Run Code Online (Sandbox Code Playgroud)

.net sql-server stored-procedures

101
推荐指数
6
解决办法
15万
查看次数

SQL函数作为默认参数值?

我尝试用以下方法更改默认参数值:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()
Run Code Online (Sandbox Code Playgroud)

并且所有SQL预编译器都给了我这个错误:

消息102,级别15,状态1,过程my_sp,行8'''附近的语法不正确.

我已经创建了这个程序.(我不确定这是否相关.)我正在使用null默认值并稍后检查,但这似乎不合适.我可以在一行中做到这一点吗?


更新:我将关闭MSDN对存储过程参数的描述:

[= default]是参数的默认值.如果定义了默认值,则可以在不指定该参数值的情况下执行该函数.

注意:
除varchar(max)和varbinary(max)数据类型外,可以为CLR函数指定缺省参数值.

当函数的参数具有默认值时,必须在调用函数时指定关键字DEFAULT以检索默认值.此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值.

我读错了吗?

非常感谢.

sql sql-server stored-procedures

100
推荐指数
4
解决办法
9万
查看次数

在SQL Server上插入更新存储过程

我已经编写了一个存储过程,如果存在记录将进行更新,否则它将进行插入.它看起来像这样:

update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Run Code Online (Sandbox Code Playgroud)

我以这种方式编写它的逻辑是更新将使用where子句执行隐式选择,如果返回0,则插入将发生.

这样做的替代方法是进行选择,然后根据返回的行数进行更新或插入.我认为这是低效的,因为如果要进行更新,将导致2次选择(第一次显式选择调用,第二次隐式更新位置).如果proc要进行插入,那么效率就没有差别.

我的逻辑声音在这里吗?这是如何将插入和更新组合到存储过程中的?

sql sql-server stored-procedures upsert

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

如何显示完整的存储过程代码?

你如何查看存储过程/函数?

假设我有一个没有原始定义的旧函数 - 我想看看它在pg/psql中做了什么,但我似乎无法找到一种方法来做到这一点.

使用Postgres版本8.4.1

postgresql stored-procedures

99
推荐指数
8
解决办法
11万
查看次数

MySQL:在存储过程中将多个字段选择为多个变量

我可以在MySQL的同一个选择查询中将多个列选择为多个变量吗?

例如:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;
Run Code Online (Sandbox Code Playgroud)

这个的正确语法是什么?

mysql sql stored-procedures sql-function

98
推荐指数
3
解决办法
12万
查看次数