我需要从包含参数的数据库表中获取查询。然后使用该查询来更新另一个表,但是我需要能够将另一个参数传递给该更新语句。
declare @locnum int
set @locnum = 032
declare @tempPersonID int
set @tempPersonID = 10008
declare @passwordQuery varchar(max)
set @passwordQuery = (select passwordQuery from location where locationNum = @locnum)
select @passwordQuery
update tempPerson
set [password] = @passwordQuery
where tempPersonID = @tempPersonID
select *
from tempPerson
select @passwordQuery
返回(select left(firstname,1) + left(lastname,1) + custom as [password] from tempPerson where tempPersonID = @tempPersonID)
。我需要能够在此查询和where语句中使用@tempPersomID
参数。
答案 0 :(得分:1)
首先,当您更新记录时,您从中选择信息时,您仅需要以下内容作为您的@passwordQuery
:
left(firstname,1) + left(lastname,1) + [custom]
然后下面的代码将您的代码用于动态SQL:
declare @locnum int = 032, @tempPersonID int = 10008, @passwordQuery varchar(max), @sql nvarchar(max), @params nvarchar(max);
select @passwordQuery = passwordQuery from [location] where locationNum = @locnum;
-- select @passwordQuery
set @sql = 'update tempPerson set [password] = ' + @passwordQuery
+ ' where tempPersonID = @tempPersonID';
set @params = '@tempPersonID int';
execute sp_executesql @sql, @params, @tempPersonID = @tempPersonID;
select *
from tempPerson
答案 1 :(得分:0)
您可以使用EXEC
或sp_ExecuteSQL
语句通过参数执行动态SQL语句。
就您而言,sp_ExecuteSQL
似乎更合适。语法如下所示
sp_executesql [ @stmt = ] statement
[
{ , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }
{ , [ @param1 = ] 'value1' [ ,...n ] }
]
因此,您的整个脚本可以如下重写:
DECLARE @locnum INT
@tempPersonID INT,
@passwordQuery VARCHAR(MAX),
@params VARCHAR(500),
@ParamOut VARCHAR(500)
SELECT
@locnum = 032,
@tempPersonID = 10008,
@params = N'@tempPersonID INT,@MyPwd VARCHAR(500) OUTPUT'
SELECT
@passwordQuery = 'SET @MyPwd = ('+passwordQuery+')'
FROM Location
WHERE LocationNum = @locnum
sp_ExecuteSQL(@passwordQuery,@params,@tempPersonID,@MyPwd = @ParamOut OUTPUT )
UPDATE tempPerson
SET
[password] = @ParamOut
WHERE tempPersonID = @tempPersonID
select *
from tempPerson