我已经看了几次EF Code First的演示,还没有看到EFCF如何与存储过程一起工作.
如何声明一个将使用某些sp的方法?我是否可以将实体传递给调用sp的方法,而无需手动将实体属性映射到sp参数?
另外,如果我改变模型会发生什么?它会在从模型中重新创建表格时丢失我的sp吗?触发器呢?
如果不支持这些东西,是否有计划在将来支持它们?
如何将查询结果分配给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
传统观点认为存储过程总是更快.所以,因为他们总是更快,使用它们所有的时间.
我很确定这是基于历史背景,曾经是这种情况.现在,我并不主张不需要存储过程,但我想知道在现代数据库(如MySQL,SQL Server,Oracle或< Insert_your_DB_here >)中存储过程在什么情况下是必需的.通过存储过程进行ALL访问是否过度?
我从我的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> …
我知道这是可能的,但不知道如何.
我需要在Microsoft SQL数据库中搜索特定字符串的所有提及.例如:我想搜索所有表,视图,函数,存储过程,...字符串"tblEmployes".(不是表格中的数据)
我需要这个的原因之一,我想删除一些创建的额外数据表,但我担心它们可能在程序或函数中的某个地方使用.
任何帮助表示赞赏.
我在访问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) 我尝试用以下方法更改默认参数值:
ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()
Run Code Online (Sandbox Code Playgroud)
并且所有SQL预编译器都给了我这个错误:
消息102,级别15,状态1,过程my_sp,行8'''附近的语法不正确.
我已经创建了这个程序.(我不确定这是否相关.)我正在使用null默认值并稍后检查,但这似乎不合适.我可以在一行中做到这一点吗?
[= default]是参数的默认值.如果定义了默认值,则可以在不指定该参数值的情况下执行该函数.
注意:
除varchar(max)和varbinary(max)数据类型外,可以为CLR函数指定缺省参数值.当函数的参数具有默认值时,必须在调用函数时指定关键字DEFAULT以检索默认值.此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值.
我读错了吗?
非常感谢.
我已经编写了一个存储过程,如果存在记录将进行更新,否则它将进行插入.它看起来像这样:
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要进行插入,那么效率就没有差别.
我的逻辑声音在这里吗?这是如何将插入和更新组合到存储过程中的?
你如何查看存储过程/函数?
假设我有一个没有原始定义的旧函数 - 我想看看它在pg/psql中做了什么,但我似乎无法找到一种方法来做到这一点.
使用Postgres版本8.4.1
我可以在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)
这个的正确语法是什么?
sql ×5
sql-server ×4
c# ×2
database ×2
postgresql ×2
.net ×1
code-first ×1
function ×1
mysql ×1
plpgsql ×1
search ×1
sql-function ×1
upsert ×1