问题标签 [sp-executesql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
84299 浏览

sql - 执行 sp_executeSql for select...into #table 但无法选择出临时表数据

试图选择...进入 sp_Executedsql 中的临时表 #TempTable。没有成功插入,但那里写的消息(受影响的 359 行)意味着成功插入?下面的脚本

执行后,它会向我返回消息(受影响的 359 行)。接下来尝试从#TempTable 中选择数据时。

它还给我:

怀疑它仅在“选择”部分工作。插入不工作。如何修复它?

0 投票
3 回答
13929 浏览

sql-server - 使用 sp_executesql 在 TSQL 中执行很长的语句

我想执行大约 10,000 个字符的动态 SQL 语句。

当我使用 sp_executesql 如下:

我收到以下错误

据我所知,我们可以使用 sp_executesql 来执行很长的语句,不是吗?

我正在使用 SQL Server 2008,企业版,64 位。

我怎样才能做到这一点?谢谢。

0 投票
1 回答
242 浏览

c# - 在 LINQ 中使用存储过程

我想使用 LINQ 以这种方式调用存储过程,但我想调用的存储过程包含由执行的 SQL 字符串

这样 Visual Studio 不会生成结果类。为了解决这个问题,我执行 SQL 字符串

也许这不是最好的方法,但它确实有效。问题是它有时会以错误的顺序返回项目。如何解决?

0 投票
2 回答
4854 浏览

entity-framework - Entity Framework 4.2 exec sp_executesql 不使用索引(参数嗅探)

我遇到了针对 SQL Server 2008 R2 运行的实体框架 (4.2) 生成的简单 SQL 查询的一些主要性能问题。在某些情况下(但不是全部),EF 使用以下语法:

在其他情况下,只需执行原始 SQL,并将提供的参数烘焙到查询中。我遇到的问题是使用 sp_executesql 执行的查询忽略了我的目标表上的所有索引,导致查询性能极差(通过检查 SSMS 中的执行计划确认)。

经过一番研究,听起来这个问题可能是由“参数嗅探”引起的。如果我像这样附加 OPTION(RECOMPILE) 查询提示:

使用目标表上的索引并且查询执行得非常快。我还尝试切换用于禁用数据库实例(http://support.microsoft.com/kb/980653)上的参数嗅探(4136)的跟踪标志,但这似乎没有任何效果。

这给我留下了几个问题:

  1. 无论如何将 OPTION(RECOMPILE) 查询提示附加到实体框架生成的 SQL 中?
  2. 有没有办法阻止实体框架使用 exec sp_executesql,而是简单地运行原始 SQL?
  3. 还有其他人遇到这个问题吗?还有其他提示/提示吗?

附加信息:

  1. 我确实通过 SSMS 重新启动了数据库实例,但是,我将尝试从服务管理控制台重新启动服务。
  2. 参数化设置为 SIMPLE (is_parameterization_forced: 0)
  3. 针对临时工作负载进行优化具有以下设置
    • 值:0
    • 最小值:0
    • 最大:1
    • 使用价值:0
    • is_dynamic: 1
    • is_advanced: 1

我还应该提到,如果我在使用以下脚本启用跟踪标志 4136 之后通过服务管理控制台重新启动 SQL Server 服务,似乎实际上清除了跟踪标志......也许我应该以不同的方式这样做......

0 投票
3 回答
121 浏览

sql-server-2008 - 执行SQL错误

这是我尝试在 SQL Server 上执行的以下代码。

当我尝试运行它时,它会出错说

“关键字'as'附近的语法不正确”

我取出这段代码并单独执行它并没有出错。我在这里错过了什么吗?

0 投票
1 回答
955 浏览

sql - 在 sp_executesql 语句中显式替换参数的快速方法?

我正在用 C# 编写一个程序,该程序使用传递给 sp_executesql 的参数运行一些选择语句。我在测试时遇到的一个问题是,无论我是从 SQL Profiler 还是从 Visual Studio 中的手表执行的命令,参数的值都是在语句末尾指定的,而不是在-查询中的行。出于测试目的,我想要一种将参数值替换为参数的快速方法。

所以,而不是:

我想:

请不要过多关注示例的语法,因为它只是用于演示概念。有谁知道一个快速的方法来做到这一点?基本上,我希望将其替换为测试目的,因为这将使我更容易修改条件以测试它们如何影响返回的结果。我将不胜感激任何人都可以提供的帮助。谢谢。

0 投票
2 回答
3774 浏览

sql - 如何使用 SQL BETWEEN 比较字符串中的两个日期以执行 sp_executesql?

我的 SQL 存储过程中有一行看起来像这样(按预期工作):

但是,再往下,我有一条线:

@userIDs 是一个逗号分隔的 ID 字符串,而 oh.user 是一个整数,所以我实际上必须将整个 SQL 查询放入一个动态字符串 (@sql) 中,并将所有参数连接到其中,然后使用

除了 BETWEEN 日期外,一切都运行良好,我尝试了几种方法并不断收到错误或没有返回任何结果:

什么都不返回。

也不返回任何内容。

返回将 DATETIME 转换为字符串的错误。

任何帮助表示赞赏。

谢谢,托马斯

0 投票
2 回答
20150 浏览

sql-server - 执行 SQL 字符串并将结果插入表中

我有一张桌子

QueryIndex 是一个循环计数器,它将从@QueryIndex 中获取值。FieldValue 将从另一个 SQL 字符串中获取值。出于某种原因,我需要动态执行 SQL 字符串。

现在我尝试将数据插入@Results

毫不奇怪,这段代码不起作用。请为我提供将数据插入表中的解决方案。任何方法都值得尝试。表中的结果应如下所示:

谢谢。

0 投票
3 回答
5245 浏览

sql-server - 访问在不同范围内创建的 SQL Server 临时表

我正在为 SQL Server 2008 编写一个存储过程,我需要从一组表中提取信息。我不知道这些表的结构。同一数据库中还有另一个表,它告诉我该表中字段的名称和类型。

我正在这样做:

之后我删除了临时表。这发生在一个循环中,因此该表被创建、填充和删除多次,每次都有不同的列。

这失败并出现错误:

对象名称无效:#new_temporary_table。

经过一番谷歌搜索后,我发现:

  1. 该表#new_temporary_table是在exec sp_executesql与我的存储过程不同的调用范围内创建的。这就是下一个exec sp_executesql找不到表的原因。这篇文章对此进行了解释: http ://social.msdn.microsoft.com/forums/en-US/transactsql/thread/1dd6a408-4ac5-4193-9284-4fee8880d18a

  2. 我可以使用以 . 开头的全局临时表##。我不能这样做,因为多个存储过程可以同时运行并且它们会影响彼此的状态

  3. 在这篇文章中,它说如果我发现自己处于这种情况,我应该改变数据库的结构。这对我来说不是一个选择:http: //www.sommarskog.se/dynamic_sql.html

我发现的一种解决方法是将所有select into #new_temporary_table..和所有insert into ...脚本组合成一个巨大的语句。这工作正常,但它有一些缺点。

例如,如果我打印@sql 进行故障排除,文本会被截断。

我还有其他选择吗?欢迎所有想法。

0 投票
2 回答
38438 浏览

sql-server-2008 - 在 SQL Server 中远程调用表值函数的解决方法有更多问题

我有一个带有一组参数的查询,这些参数需要使用不同的参数多次运行,所以我将它包装在一个表值函数中。

该表值函数需要从远程服务器调用。不幸的是,链接服务器上的调用失败并出现错误:

Microsoft 承认“远程调用表值函数”是 SQL Server 2008 中遗漏的一个功能。请参阅:http ://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function -不允许通话

我发现了一种使用 OPENQUERY 语法的解决方法,它允许查询在远程服务器上本地运行,然后返回结果集。请参阅:http ://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd

不幸的是,这个解决方法需要一个解决方法,因为它需要一个字符串作为参数,这意味着你不能使用 OPENQUERY 语法传递一个变量,你甚至不能在其中连接一个字符串,就像你想包含你的变量一样想要传递给远程表值函数。变通方法的变通方法是使用动态 SQL 显式构建 OPENQUERY 查询,确保将正常字符串传递给它。请参阅:http ://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/0847ad24-0dfe-4ae1-9788-5516c7830f40/

然而,另一个问题由此产生。即使确保所有引号、双引号和四引号都正确嵌入,以便整个事情可以通过 exec sp_executesql 传递,仍然存在问题:

当查询最终调用表值函数时,我收到错误:

我不确定为什么会收到此错误,因为我的用户名存在映射,如果我只是用实际表替换表值函数,它会很好地返回结果。OPENQUERY 语句会出现问题,无论它是否使用 sp_executesql 执行,正如我所说,它仅在调用表值函数时发生。

任何想法如何解决这个问题?