gpt4 book ai didi

sql-server - SQL SERVER sp_executesql ')' 附近的语法不正确

转载 作者:行者123 更新时间:2023-12-03 17:55:31 24 4
gpt4 key购买 nike

当我尝试在 sql server 2014 中执行 sp_ExecuteSql 时遇到这个问题有我的存储过程:

alter proc search
@Name nvarchar
as
declare @SQL nvarchar
declare @Params nvarchar
begin
set @SQL = N' Select * from Table_1 , Table_2 where (1=1) '

if @Name is not null
begin
set @SQL = @SQL + ' and Table_2.thatoneID = ( Select Table_1.Id from Table_1 where Table_1.Name like ''%''+@Name+''%'' ) '
end
set @SQL = @SQL + ' and Table_2.thatoneID = Table_1.Id ; '

set @Params = '@Name nvarchar'

execute sp_executesql @SQL , @Params , @Name
end

当我尝试:

Execute search 'hh'

我遇到了这个错误

Msg 102, Level 15, State 1, Line 29 Incorrect syntax near ')'.

最佳答案

您应该始终指定变量的长度,因此 nvarchar(100) 否则它将默认为 1 个字符。

只需通过打印来测试您的变量存储的内容:

print @sql
print @params

没有长度设置,唯一打印的是

@

为什么 @sql 变量只有“@”而不是 SELECT 关键字中的“S”?因为您在 @sql 变量的开头有一个空格。

与为每个变量设置大小时相反(我将使用最大值,因为我不知道您实际需要的长度):

declare @SQL nvarchar(max)
, @Name nvarchar(max)
declare @Params nvarchar(max)
begin
set @SQL = N' Select * from Table_1 , Table_2 where (1=1) '

if @Name is not null
begin
set @SQL = @SQL + ' and Table_2.thatoneID = ( Select Table_1.Id from Table_1 where Table_1.Name like ''%''+@Name+''%'' ) '
end
set @SQL = @SQL + ' and Table_2.thatoneID = Table_1.Id ; '

set @Params = '@Name nvarchar'

print @sql
print @params

end

这会给你:

 Select * from Table_1 , Table_2 where (1=1)  and Table_2.thatoneID = Table_1.Id ; 
@Name nvarchar

我建议你先试试这个,看看你是否仍然得到这个错误。

关于sql-server - SQL SERVER sp_executesql ')' 附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39117705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com