dynamic-sql相关内容
我想知道MS SQL Server 2005中是否有办法做到这一点: 声明@theDate varchar(60 ) SET @theDate ='''2010-01-01''AND''2010-08-31 23:59:59''' SELECT AdministratorCode, SUM(Total)作为总数, SUM(WOD.Quantity)作为数量, AVG(Total
..
所以,我一直在搜寻,发现了与我的问题类似的东西,但是我需要更多帮助才能找到真正的解决方案。 我在尝试构造一个将返回2列数据的查询时,第一列应该是列名称本身的列表,第二列应该是该列的值。 在视觉上看起来像这样 Column1 Column2 ------- ----- - 栏A value_of_columnA 栏B value_of_columnB ... ...
..
我想运行这样的查询: SELECT * FROM Studio WHERE ID IN(134,144,132, 138,7432,7543,2566) ,但 Id的金额 的传递仅在运行时确定。 我必须使用动态SQL还是可以使用存储过程来完成? 更新: 如果有一个选项可用,哪个更好? 谢谢。 解决方案 根据您的Sql Server
..
为什么会出现此错误 过程期望类型为'ntext / nchar / nvarchar'的参数'@statement'。 当我尝试使用 sp_executesql 吗? 解决方案 听起来像您用VARCHAR语句调用sp_executesql时,它需要是NVARCHAR。 例如这将产生错误,因为@SQL需要为NVARCHAR DECLARE @SQL VARCHAR(
..
我们有大量依赖于动态SQL的SQL Server存储过程。 存储过程的参数在动态SQL语句中使用。 我们需要在这些存储过程中使用标准验证函数来验证这些参数并防止SQL注入。 假设我们有这些约束: 我们无法重写不使用动态SQL的过程 我们不能使用sp_OACreate等来使用正则表达式进行验证。 我们无法修改调用在将参数传递给存储过程之前先验证存储过程。 是
..
我有以下动态查询,它在没有 WHERE 子句的情况下工作正常,该子句期望 UNIQUEIDENTIFIER 。 当我将其传递时,没有得到结果。我尝试了 CAST 和 CONVERT ,但没有结果。我可能做错了,有人可以帮忙吗? 创建过程[dbo]。[sp_Test1] / *'b0da56dc-fc73 -4c0e-85f7-541e3e8f249d'* / ( @p_Create
..
我正在尝试使用SQL语句切换当前数据库。 我尝试了以下操作,但所有尝试均失败: USE @DatabaseName EXEC sp_sqlexec @Sql-其中@Sql ='USE ['+ @DatabaseName +']' 添加更多内容详细信息。 编辑:我想在两个单独的数据库中执行一些操作,两个数据库都配置了一个变量。像这样的东西: USE Database1
..
我有一个查询,我尝试将行值转换为列名,当前正在使用 SUM(Case ...)作为'ColumnName'语句,像这样: SELECT SKU1, SUM(当Sku2 = 157时为0的情况下结束)作为'157', SUM(当Sku2 = 158时为0的情况下,否则为0结束)为'158', SUM(当Sku2 = 167时则为0的情况下结束,作为另外的数量)作为'167' 从
..
如何删除所有名称以给定字符串开头的表? 我认为可以通过一些动态SQL和 INFORMATION_SCHEMA 表来完成。 解决方案 如果数据库中存在多个查询,则可能需要修改查询以包括所有者。 DECLARE @cmd varchar(4000) DECLARE cmds用于 的游标SELECT'drop table ['+ Table_Name +']' 来自INFOR
..
看起来,通过EXECUTE字符串方法使用动态SQL创建的#temptable具有不同的范围,并且不能在同一存储过程中被“固定” SQL引用。 但是,我可以在子序列动态SQL中引用由动态SQL语句创建的临时表,但是除非SQL已修复,否则存储过程似乎不会将查询结果返回给调用客户端。 一个简单的2张桌子的场景: 我有2张桌子。我们称它们为“订单和物品”。订单的主键为OrderId,项目的主键为
..
代码如下: 更改过程dbo.pdpd_DynamicCall @SQLString varchar(4096)= null AS 开始 创建表#T1(column_1 varchar(10),column_2 varchar(100)) 插入#T1 execute('execute'+ @SQLString) select * from#T1 En
..
所以我要在MS SQL Server 2008中写一个存储过程。这是一个很长的查询,我必须动态地写它,所以我创建了一个名为 @Query ,并使其类型为 NVARCHAR(MAX)。现在,我已经被告知,在现代版本的SQL Server中, NVARCHAR(MAX)可以容纳大量的数据,远远超过了最初最多4000个字符。但是,当我尝试打印时, @Query 仍然被截断为4000个字符。 DE
..
在存储过程中执行动态SQL,如下所示: DECLARE @sqlCommand nvarchar(1000) DECLARE @city varchar(75) SET @city ='伦敦' SET @sqlCommand ='从客户所在城市= @city的SELECT COUNT(*)' 执行sp_executesql @sqlCommand,N'@ city nvarchar(
..
我需要执行一条动态SQL,然后需要将结果存储到变量中。 我知道我可以使用 sp_executesql ,但是找不到有关如何执行此操作的清晰示例。 解决方案 如果您可以执行输出参数 DECLARE @retval int DECLARE @sSQL nvarchar(500); DECLARE @ParmDefinition nvarchar(500); 声明@t
..
我花了很多时间来解决这个问题,因此本着这篇文章,我将其发布在这里,因为我认为这可能对其他人有用。 如果有人有更好的脚本或要添加的内容,请发布。 编辑:是的,我知道如何在Management Studio中进行操作-但我需要能够在另一个应用程序中进行操作。 解决方案 我已经修改了上面的版本,可以在所有表中运行并支持新的SQL 2005数据类型。它还保留主键名称。仅适用于SQL
..
为什么有人在SQL子句中使用 WHERE 1 = 1 AND&(通过连接字符串获得的SQL,或者是视图定义) 我在某处看到过它可以用来防止SQL注入,但是看起来很奇怪。 如果有注入 WHERE 1 = 1并注入OR 1 = 1 与 injected OR 1 = 1 具有相同的结果。 / p> 稍后编辑:视图定义中的用法如何? 谢谢您的回答。 不过, 我不明白为什么
..
我创建了一个程序,其代码如下: 创建PROCEDURE Sample(@ID INT) AS 开始 声明@SQL NVARCHAR(max) 声明@SchemaName SYSNAME 声明@TableName SYSNAME 声明@DatabaseName SYSNAME SELECT @SQL ='创建表'+ @DatabaseName +'。' + @Schema
..
是否可以在存储过程中使用动态生成的SQL在MySQL中创建触发器?我正在通过准备一条语句在过程中执行其他动态构造的查询,但是当我尝试使用相同的方法创建触发器时,出现以下错误: 错误代码:1295在准备好的语句协议中尚不支持此命令 来自 错误#31625,PREPARED STATEMENT语法不允许创建触发器 自2007年以来一直在抱怨同一件事。 从 WL#2871:准备尚未修复
..
我在一个表中保留了所有更改(插入,更新,删除)的触发器。当我每次只插入一行时,它工作正常。但是,当我尝试一次插入多行时,我收到此错误: 子查询返回了多个值。当 子查询遵循=,!=,,> =或将子查询用作 表达式时,这是不允许的。 这是触发器的代码(我删除了一些不需要缩短代码的部分,例如变量声明等)。 UPDATE: :#tempTrigT包含多行时,这些行中的实
..
作为一些管理任务的一部分,我们有很多表,每个表都需要创建一个触发器。修改对象后,触发器将在“审计”数据库中设置标志和日期。为简单起见,我有一个表,其中包含需要创建触发器的所有对象。 我试图为每个对象生成一些动态sql来做到这一点,但是我得到了此错误: 'CREATE TRIGGER'必须是查询批处理中的第一条语句。 这是生成sql的代码。 创建过程[spCreateTabl
..