我有一张桌子
create table user (userId varchar(8) not null, userName varchar(8) not null)
insert into user
select 'NAME1','name1'
union all
select 'NAME2', 'name2'
union all
select 'NAME3','name3'
我使用存储过程作为通配符参数:
create procedure wildcard_name
@userName nchar(8)= '%'
as
select * from user
where userName like @userName;
exec wildcard_name 'n%';
exec语句没有给出任何结果,为什么?
答案 0 :(得分:3)
你有没有尝试再次运行它?我怀疑exec调用现在是你程序正文的一部分。怎么样:
ALTER PROCEDURE dbo.wildcard_name
@userName NVARCHAR(8) = '%'
AS
BEGIN
SET NOCOUNT ON;
SELECT userId, userName
FROM dbo.user
WHERE userName LIKE @userName;
END
GO -- <-- this is important! It tells SSMS that your procedure has ended!
EXEC dbo.wildcard_name N'n%';
其他一些建议我不得不提及:
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
等SELECT *
。BEGIN
/ END
包裹您的程序正文,并且不要害怕使用缩进来使其更具可读性。SET NOCOUNT ON;
来阻止n row(s) affected
条消息干扰您的搜索结果。NVARCHAR
参数应该有一个N前缀(虽然我很困惑,为什么你首先在varchar
和nchar
之间交替 - 这是两个班次我在哪里期待零)。COLLATE
子句更改where子句。编辑这对我来说似乎运作得很好,所以请解释一下你做的不同(并且“不起作用”仍然意味着空结果或其他什么?):