динамический sql sp_executesql работает, но снимает пробелы - PullRequest
1 голос
/ 28 ноября 2011

Получите удовольствие от 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
--------------- ----------------------------------------

Я нахожусь на кривой обучения с t-sql, используя sql server 2005 с клиентским доступом sqlcmd.

1 Ответ

0 голосов
/ 28 ноября 2011

Вам не понадобится ' вокруг вашей переменной, поэтому вы можете опустить их, и ваша строка будет выглядеть так:

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

Это будет точно так же, как если бы у вас не было отметок ' вокруг вашей переменной @dummy в первых двух успешных запросах.

...