【问题标题】:dynamic sql sp_executesql works but shoots blanks动态 sql sp_executesql 可以工作,但会出现空白
【发布时间】:2012-01-07 17:02:20
【问题描述】:

t-sqlsp_executesql 玩得开心(下面的测试输出)。最后一个难题是sp_executesql 的查询和定义参数需要大写N

感觉是输入参数@cardcodeParm的用法有问题。

如您所见,前两个镜头有效。第三个有效,但没有返回任何内容。

5> execute sp_executesql N'select cardcode, cardname from dbo.ocrd where @dummy = @dummy  and cardcode = ''BTG000'' ', N' @dummy int ', @dummy = 1
6> go
cardcode        cardname
--------------- ----------------------------------------
BTG000          HUGRO GmbH

(1 rows affected)
1> execute sp_executesql N'select cardcode, cardname from dbo.ocrd where @dummy = @dummy  and cardcode = ''BTG000'' ', N' @dummy nvarchar(5) ', @dummy = '1'
2> go
cardcode        cardname
--------------- ----------------------------------------
BTG000          HUGRO GmbH

(1 rows affected)
1> execute sp_executesql N'select cardcode, cardname from dbo.ocrd where cardcode = ''@cardcodeParm'' ',
2>     N' @cardcodeParm nvarchar(100) ', @cardcodeParm = 'BTG000';
3> go
cardcode        cardname
--------------- ----------------------------------------

我正在学习使用带有 sqlcmd 客户端访问的 sql server 2005 的 t-sql。

【问题讨论】:

  • 感谢您提供查询、结果和疑似故障位置。

标签: sql-server sql-server-2005 dynamic-sql sqlcmd


【解决方案1】:

您的变量周围不需要',因此您可以省略它们,您的行将如下所示:

execute sp_executesql N'SELECT cardcode, cardname
                        FROM dbo.ocrd
                        WHERE cardcode = @cardcodeParm ',
N' @cardcodeParm nvarchar(100) ', @cardcodeParm = 'BTG000';

这与在前两个成功查询中您的 @dummy 变量周围没有 ' 标记时完全相同。

【讨论】:

  • 你是对的,非常感谢。因此,必须对 sp_executesql 进行编程,以便对字符串变量进行引用。
猜你喜欢
  • 1970-01-01
  • 2016-06-17
  • 2010-10-07
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多