Tag: sql server

SQL Server将SP_EXECUTESQL识别为对象而不是过程名称

我正在使用DBContext.Database.SqlQuery从我的C#代码存储库执行存储过程。 它工作正常,但我想知道它为什么执行如下所示的过程: exec sp_executesql N’EXEC GetCaseList @CaseStage’,N’@CaseStage int’,@CaseStage=9 而不是 EXEC GetCaseList @CaseStage = 9 有没有办法让我的所有程序都像这样从c#执行 EXEC GetCaseList @CaseStage = 9而不是exec sp_executesql N’EXEC GetCaseList @CaseStage’,N’@CaseStage int’,@CaseStage=9 ? 如何使SQL Server Profiler将过程名称视为对象而不是SP_EXECUTESQL? 注意:我想从c#执行过程作为EXEC GetCaseList @CaseStage = 9因为我通过SQL Server Profiler以表格格式保存跟踪数据。 在ObjectName列中,它将sp_executesql显示为对象而不是过程名称(GetCaseList)作为对象。 我只能从c#代码进行更改。

使用带参数的命令时,临时表的“无效对象名称”

我正在创建一个临时表,并使用相同的命令和连接使用两个单独的语句填充它。 但是,如果我创建在创建之前插入参数的表,则会收到“无效的对象名称”。 如果我在创建后添加它,它工作正常。 临时表应该持续整个会话,因此当参数添加到命令对象时,我看不到它的重要性。 失败: using (SqlConnection conn = new SqlConnection(“Data Source=.;Initial Catalog=TEST;Integrated Security=True;”)) using (SqlCommand cmd = conn.CreateCommand()) { conn.Open(); cmd.Parameters.Add(new SqlParameter(“@ID”, 1234)); cmd.CommandText = “CREATE TABLE #Test (ID INT NOT NULL PRIMARY KEY, I INT NOT NULL)”; cmd.ExecuteNonQuery(); cmd.CommandText = “INSERT INTO #Test VALUES (@ID, 1)”; cmd.ExecuteNonQuery(); ….. more code that uses the […]

在SqlBulkCopy中使用NHibernate事务

我正在使用NHibernate存储一些数据,我需要插入大量数据作为此操作的一部分 – 即在同一事务中。 代码如下所示: using (ISession session = NHibernateHelper.OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { session.SaveOrUpdate(something); // … SqlBulkCopy bulkCopy = new SqlBulkCopy( (SqlConnection)session.Connection, SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.FireTriggers, ???transaction??? ); //… transaction.Commit(); } 我知道我可以使用TransactionScope或以其他方式使用它。 但我坚持这种模式。 让我们假装为了独立的DB访问(如果我提取并注入任意批量插入操作)。 有没有办法如何从NHibernate.ITransaction获取SqlTransaction实例? 谢谢

存储过程或批量声明

故事是我需要优化我的数据库访问。 现在我需要从6个不同的表中检索相关数据。 我在这些方面总结了人们的建议: 对于不同的命令使用相同的连接仍然需要在每次执行命令时访问db 存储过程是一种很好的方法,可以使用多个select语句(不使用连接)从多个表中进行选择,并且只需访问一次数据库 数据库上实际负载的来源是与它的连接,而不是数据的数量(数量仍会影响性能,但N连接是一个更大的因素)。 现在我希望有多个SELECT语句,并且如上所述,我认为我应该使用Stored Procedure选项。 但我想到了使用批处理SELECT语句 示例: SELECT e FROM p; SELECT x,y,z FROM t; SELECT ….; SELECT ….; SELECT e FROM p; SELECT x,y,z FROM t; SELECT ….; SELECT ….; 这是否会导致单次访问数据库作为存储过程? 你觉得我的选择怎么样? ..谢谢你提前的时间:)

如何在INSERT期间让EF 6在数据库上处理DEFAULT CONSTRAINT

我是EF的新手(这是我的第一周),但对数据库或编程并不陌生。 其他人也提出了类似的问题,但我觉得它没有被问到正确的细节,或者解释得非常需要解释,所以我走了。 问题:如何让Entity Framework正确处理执行INSERT时定义了DEFAULT CONSTRAINT的数据库中的列? 这意味着,如果我在插入操作期间没有在模型中提供值,如何让EF从其生成的TSQL INSERT命令中排除该列,以便数据库定义的DEFAULT CONSTRAINT可以工作? 背景 我有一个我创建的简单表,只是为了测试Entity Framework 6(EF6)及其与SQL Server能够更新的列的交互。 这使用了IDENTITY,TIMESTAMP,COMPUTED和一些应用了DEFAULT CONSTRAINT的列。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[DBUpdateTest]( [RowID] [int] IDENTITY(200,1) NOT NULL, [UserValue] [int] NOT NULL, [DefValue1] [int] NOT NULL, [DefValue2null] [int] NULL, [DefSecond] [int] NOT NULL, [CalcValue] AS (((([rowid]+[uservalue])+[defvalue1])+[defvalue2null])*[defsecond]), [RowTimestamp] [timestamp] NULL, CONSTRAINT [PK_DBUpdateTest] PRIMARY […]

如何从SQL Server数据库中获取以给定字符串开头的条目?

我有一个数据库,在标签系统中使用了很多单词。 我已经为自动完成框创建了必要的代码,但我不确定如何以最有效的方式从数据库中获取匹配的条目。 我知道LIKE命令,但在我看来它更像是一个EQUAL命令。 我只得到与我输入的单词完全相同的单词。 我的计划是读取每一行,然后使用C#的string.StartsWith()和string.Contains()函数来查找可能适合的单词,但我认为对于大型数据库,读取每一行可能效率低下然后过滤它们。 有没有办法只读取以SQL Server开头或包含给定字符串的行?

将Windows Phone和Windows 8应用程序连接到SQL Server

将Windows Phone应用程序或Windows 8应用程序直接连接到SQL Server的最佳方法是什么? 应用程序不得使用代理/ IIS等,并希望使用SQL直接连接,就像使用普通的桌面应用程序一样。 谢谢。

通过WCF执行自定义SQL查询

我使用ORACLE和SQL Server的WCF服务。 然后我需要“通用”解决方案。 我需要构建一个WCF方法来实质上执行自定义SQL字符串并返回读者结果。 这不是一个很好的做法,可能是最好的避免,它有点打破了WCF服务的重点,但在我的情况下,这需要做。 我不希望WCF数据服务既不能用于其他技术或协议。 只有WCF服务(SOAP)。 关于它的任何好的做法? 也许List<List>返回值需要改进。 SQL Server的源代码。 对于Oracle来说也是如此。 [OperationContract] List<List> executeSQL(string sql, bool returnExpected); public List<List> executeSQL(string sql, bool returnExpected) { List<List> toReturn = new List<List>(); using (SqlConnection con = new SqlConnection(YourConnectionString)) { con.Open(); SqlCommand cmd = con.CreateCommand(); cmd.CommandText = sql; if (returnExpected == true) { using (SqlDataReader sqlReader = cmd.ExecuteReader()) […]

返回与该项目相关的所有记录都具有特定条件的项目

请考虑这种情况: 我有这样一张桌子: ID City Status ————————————– 1 1 1 2 1 1 3 1 1 4 2 1 5 2 0 6 3 1 7 3 1 8 3 1 9 3 1 10 4 3 11 4 1 12 4 0 我想要返回Citis,与该城市相关的所有记录都具有Status=1并且如果其中一条记录具有Status1 ,则该城市将从reslut集中排除。 在这个场景中,我想要回归城市:1,3。 我如何使用Sql Query或LINQ查询执行此操作? 谢谢

SQL Server 2008 – 并行执行查询

有一种简单的方法可以并行执行查询吗? 我有一个类似这样的查询: delete from TableA where id = @id delete from TableB where id = @id delete from TableC where id = @id … 我想并行完成它们。 我也可以使用C#,但不知道如何。