与t-sql
和sp_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学习曲线。
答案 0 :(得分:0)
你的变量周围不需要'
,所以你可以省略它们,你的行看起来像这样:
execute sp_executesql N'SELECT cardcode, cardname
FROM dbo.ocrd
WHERE cardcode = @cardcodeParm ',
N' @cardcodeParm nvarchar(100) ', @cardcodeParm = 'BTG000';
与前两个成功查询中'
变量周围没有@dummy
标记的情况完全相同。