动态SQL中的语法不正确

时间:2019-04-20 12:31:23

标签: sql-server-2012 dynamic-sql

在动态SQL下执行时,出现错误

  

','附近的语法不正确

代码:

declare @site varchar(40) = ''

begin
    EXECUTE SP_EXECUTESQL SELECT TP.F_PRODUCT AS ID FROM PDF_MSDS_NEW TP WHERE TP.F_AUTHORIZED IN(1,3) AND TP.F_PRODUCT <>'' AND (TP.F_TEXT_CODE LIKE @SITE), @SITE NVARCHAR(10),SITE0001
end

现在我更改了上面的查询。它现在不显示任何错误消息,但是没有输出。

CREATE TABLE PDF_MSDS_NEW(F_PRODUCT VARCHAR(50),F_AUTHORIZED INT,F_TEXT_CODE VARCHAR(100))

INSERT INTO PDF_MSDS_NEW VALUES('F0001',1,'SITE0001')

DECLARE
@SITE VARCHAR(100),
@statement nvarchar(max)
BEGIN
set @SITE='SITE0001'
set @statement ='SELECT TP.F_PRODUCT AS ID FROM PDF_MSDS_NEW TP WHERE TP.F_AUTHORIZED IN(1,3)AND TP.F_PRODUCT <>'''' AND (TP.F_TEXT_CODE LIKE @SITE)'
PRINT @statement
EXECUTE SP_EXECUTESQL @statement ,N'@SITE NVARCHAR',@SITE
END

1 个答案:

答案 0 :(得分:2)

尝试一下。我更改了动态SQL,以将参数接受到Set语句中。

CREATE TABLE PDF_MSDS_NEW(F_PRODUCT VARCHAR(50),F_AUTHORIZED INT,F_TEXT_CODE VARCHAR(100))

INSERT INTO PDF_MSDS_NEW VALUES('F0001',1,'SITE0001')

DECLARE
@SITE VARCHAR(100),
@statement nvarchar(max)
BEGIN
set @SITE='SITE0001'
set @statement ='SELECT TP.F_PRODUCT AS ID FROM PDF_MSDS_NEW TP WHERE TP.F_AUTHORIZED IN(1,3)AND TP.F_PRODUCT <>'''' AND (TP.F_TEXT_CODE LIKE ''' + @SITE + ''')'
PRINT @statement
EXECUTE SP_EXECUTESQL @statement 
END