如何在 sql server 2008 的 exec 语句中使用替换
Posted
技术标签:
【中文标题】如何在 sql server 2008 的 exec 语句中使用替换【英文标题】:how use replace in exec statement in sql server 2008 【发布时间】:2011-05-01 06:30:18 【问题描述】:我有一个存储过程,比如“call_Me”,参数很少:
Declare @Greet varchar(100) = 'Hi ||User||'
Exec Call_Me 1,'something', @Greet --parameters: bit, string, string
在通话过程中,我希望能够更换
||User||
有点别的东西。通常,在选择语句中,我会这样做:
select 1, 'something', Replace(@Greet, '||User||', u.Username) from UserTable
效果很好,但是今天,我第一次尝试在 exec 语句中使用它,错误说它期望选择,我尝试以所有可能(和明智的)方式添加选择,但它似乎没有锻炼。
如何在执行语句调用期间使用替换?
非常感谢!
【问题讨论】:
你能举一个使用替换调用存储过程的例子吗?是否要循环调用此 SP(对于许多用户名)? SP 只是将给定的数据插入到表中,但会在途中检查一些验证和外键.. 【参考方案1】:在将@Greet 传递给存储过程之前,您需要对其进行格式化:
Declare @Greet varchar(100) = 'Hi ||User||'
SELECT @Greet = Replace(@Greet, '||User||', u.Username)
FROM UserTable u
WHERE Id = 1
Exec Call_Me 1,'something', @Greet --parameters: bit, string, string
【讨论】:
我想到了这一点,但缺点是一旦我替换了原始字符串,||user||将不再在那里,所以我不能再次使用它。但我想我会用另一个变量来做这件事。谢谢。【参考方案2】:您只能在过程调用中使用文字或变量引用:
[ EXEC | EXECUTE ]
[ @return_status= ]
module_name [ ;number ] | @module_name_var
[ [ @parameter= ] value
| @variable [ OUTPUT ]
| [ DEFAULT ]
]
[ ,...n ]
[ WITH RECOMPILE ]
[;]
使用这个:
Declare @Greet varchar(100) = 'Hi ||User||'
Declare @param VARCHAR(100) = REPLACE(@Greet, '||User||', 'replacement')
Exec Call_Me 1,'something', @param
【讨论】:
【参考方案3】:我不确定我是否正确理解了您的问题,但也许使用光标可以解决您的问题:
DECLARE CURSOR users LOCAL FAST_FORWARD FOR
SELECT
username
FROM
usertable
OPEN
DECLARE @username NVARCHAR(50)
DECLARE @Greet VARCHAR(100) = 'Hi ||User||'
FETCH NEXT FROM users INTO @username
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC Call_Me 1, 'something', REPLACE(@Greet, '||User||', @username)
FETCH NEXT FROM users INTO @username
END
CLOSE users
DEALLOCATE users
如果您不需要在循环中调用它,您可以尝试类似(这可以是一个新的存储过程):
DECLARE @username NVARCHAR(50)
DECLARE @Greet VARCHAR(100) = 'Hi ||User||'
SELECT
@username = username
FROM
usernames
WHERE
user_id = 1
IF @@ROWCOUNT = 1 BEGIN
EXEC Call_Me 1, 'something', REPLACE(@Greet, '||User||', @username)
END
【讨论】:
以上是关于如何在 sql server 2008 的 exec 语句中使用替换的主要内容,如果未能解决你的问题,请参考以下文章
怎么单击sql server 2008的setup.exe没有反应?进程里面也没用,只弹出一个dos窗口,一会也就没了?