动态sql sp_executesql工作,但射击空白

时间:2011-11-28 06:56:52

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

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学习曲线。

1 个答案:

答案 0 :(得分:0)

你的变量周围不需要',所以你可以省略它们,你的行看起来像这样:

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

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