- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以动态地向 sp_ExecuteSql 提供参数列表?
在 sp_ExecuteSql 中,查询和参数定义是字符串。我们可以为这些使用字符串变量,并传入我们想要执行的任何查询和参数定义。但是,在为参数赋值时,我们似乎不能使用字符串或字符串变量作为参数名称。
例如:
DECLARE @SelectedUserName NVARCHAR(255) ,
@SelectedJobTitle NVARCHAR(255);
SET @SelectedUserName = N'TEST%';
SET @SelectedJobTitle = N'%Developer%';
DECLARE @sql NVARCHAR(MAX) ,
@paramdefs NVARCHAR(1000);
SET @sql = N'select * from Users where Name LIKE @UserName '
+ N'and JobTitle LIKE @JobTitle;'
SET @paramdefs = N'@UserName nvarchar(255), @JobTitle nvarchar(255)';
EXEC sp_ExecuteSql @sql, @paramdefs, @UserName = @SelectedUserName,
@JobTitle = @SelectedJobTitle;
EXEC sp_ExecuteSql @sql, @paramdefs,
N'@UserName = @SelectedUserName, @JobTitle = @SelectedJobTitle';
最佳答案
您可以通过使用表值参数作为唯一参数来执行此操作:
DECLARE @YourQuery NVARCHAR(MAX0 = '<your dynamic query>'
CREATE TYPE dbo.SqlVariantTable AS TABLE
(
[Name] VARCHAR(255),
Type VARCHAR(255),
Value SQL_VARIANT
)
DECLARE @Table SqlVariantTable;
-- Insert your dynamic parameters here:
INSERT INTO @Table
VALUES
('Parameter1', 'VARCHAR(255)', 'some value'),
('Parameter2', 'INT', 3),
DECLARE @ParameterAssignment NVARCHAR(MAX)
SELECT @ParameterAssignment = ISNULL(@ParameterAssignment + ';','') + 'DECLARE ' + Name + ' ' + Type + ' = (SELECT CAST(Value AS ' + Type + ') FROM @p1 WHERE Name = ''' + Name + ''')'
FROM @Table
SET @YourQuery = @ParameterAssignment + ';' + @YourQuery
EXEC SP_EXECUTESQL @YourQuery, N'@p1 SqlVariantTable READONLY', @Table
现在您可以简单地将参数插入@Table 变量中,它们将在 SP_EXECUTESQL 中执行的查询中以原始名称和类型显示。仅确保您不使用 VARCHAR(MAX) 或 NVARCHAR(MAX) 变量类型,因为 SQL_VARIANT 不支持它们。使用(例如)VARCHAR(4000) 代替
关于sql - 是否可以动态提供 sp_ExecuteSql 参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524747/
系统存储过程,sp_executesql 语言在这里! sp_executesql 执行可以多次重用或动态生成的Transact-SQL语句或批处理。Transact-SQL语句或批处理可以包
我捕获了一个由 Entity Framework 生成的查询,其中一个参数可以在 nvarchar(max) 中存储大量(400,000+ 个字符)的文本信息。 field 。我遇到的问题是,在执行语
我正在使用带参数的查询来创建数据库用户和 SQL Server 登录名。我有下一个程序: PROCEDURE [dbo].[regNewOfficial] @name nvarchar(30), @p
我正在 SQL Server 2005 中编写一个存储过程,在给定的时间点我需要执行另一个存储过程。这个调用是动态的,所以我像往常一样使用了 sp_executesql 命令: DECLARE @DB
尽管在将变量传递给 sp_executesql 时将变量声明为“游标”类型,但我收到错误“操作数类型冲突:nvarchar 与游标不兼容”。 declare CURSOR_TO_PASS cursor
我不明白为什么以下给我错误。我认为这与注释掉的部分有关,但@SQL 是 nvarchar(4000)。 BEGIN sp_executesql N'SELECT ''td''' --sp_ex
以下两个查询返回不同的结果。我知道差异与处理日期的时间部分的方式有关,但为什么会这样? // QUERY ONE select top 3 OrderDate from Orders where Or
我想从查询中获取 ID,但我得到的是 NULL,我的错误在哪里? DECLARE @TblZimz NVARCHAR(256) DECLARE @IdModul INTEGER DECLA
我正在调用一个存储过程并从我的 Windows 应用程序中传入 2 个日期作为参数。它返回所有行而不是我期望的 2 行。 存储过程是: ALTER procedure [dbo].[Get_Entri
在数据库表上运行 sp_executesql 时遇到一些问题。在本例中,我使用 ORM (NHibernate) 生成一个查询一个表的 SQL 查询。该表大约有 700 万条记录,并且索引很高。 当我
我正在调用一个存储过程并从我的 Windows 应用程序中传入 2 个日期作为参数。它返回所有行而不是我期望的 2 行。 存储过程是: ALTER procedure [dbo].[Get_Entri
我正在调用下面的代码。 在 (IDataReader dr = cmd.ExecuteReader()) sql barfs 行上,“CompanyUpdate”附近的语法不正确。 using
Msg 102, Level 15, State 1, Line 3 Incorrect syntax near '+'. 当你尝试执行下面这段代码时,会得到如上这个错误提
是否可以动态地向 sp_ExecuteSql 提供参数列表? 在 sp_ExecuteSql 中,查询和参数定义是字符串。我们可以为这些使用字符串变量,并传入我们想要执行的任何查询和参数定义。但是,在
我需要帮助将我的“用户定义表类型”参数传递给动态 sql sp_executesql。 这是我的示例代码: DECLARE @str as nvarchar(Max) DECLARE @IDLIST
有什么方法可以使用不依赖于它们在商店中定义的顺序的参数调用 sp_executesql 吗?与 exec 相同的查询效果很好,如果您有相同的顺序,它也可以很好地工作,但是必须一个一个地匹配参数很痛苦,
我需要执行一段动态 SQL,然后需要将结果存储到变量中。 我知道我可以使用 sp_executesql 但找不到有关如何执行此操作的明确示例。 最佳答案 如果你有 OUTPUT 参数,你可以这样做 D
我在执行下面的代码时遇到问题,它给出了如下错误: Msg 102, Level 15, State 1, Line 3 Incorrect syntax near '@ST'. 我可以尝试使用动态 S
我正在使用 C# 中的 Entity Framework ,并且遇到了一个问题,我已追踪到生成的 SQL 语句。 存储过程接受表值参数,但这似乎不是问题。 在 SQL Profiler 中,我看到正在
我有一个查询,它在 SQL Server Management Studio 中运行速度非常快,但在 sp_ExecuteSQL 下运行时运行速度非常慢。 这是否与在 sp_ExecuteSQL 下运
我是一名优秀的程序员,十分优秀!