如何将存储过程的结果放在select语句的列列表中?我需要将新记录插入到具有奇数密钥生成方案的数据库中,即由存储过程产生的方案。
我正在尝试在Sql Server 2012中执行一个简单的插入选择查询,就像这样
Insert Into OldTable (
StrangelyDerivedKey, FirstName, LastName
)
Select (Exec dbo.GetKey()), FirstName, LastName FROM NewTable
通常我会使用用户定义函数来实现“GetKey()”功能,但由于这是执行插入和更新的代码,因此Sql Server不允许我在UDF中执行此操作。
如何让Sql Server接受存储过程的结果作为列?如果我想做一个字符串,那就没问题了。看起来这是一个语法怪癖,可以通过另一个句法怪癖来解决,但我似乎无法想象这一点。
谢谢大家!
答案 0 :(得分:0)
这是基于UDF的,可能对你有用。
CREATE FUNCTION dbo.udf_GetKey()
RETURNS @t TABLE (StrangelyDerivedKey varchar(20))
AS
BEGIN
-- Do whatever you want here to derive a value, this is just for testing
INSERT INTO @t VALUES ('fodinpwe8hpi9un')
RETURN
END
GO
-- INSERT INTO OldTable (StrangelyDerivedKey, FirstName, LastName)
SELECT B.StrangelyDerivedKey, A.FirstName, A.LastName
FROM NewTable A
CROSS APPLY
dbo.udf_GetKey() B
更改UDF以执行导出密钥所需的任何操作。将参数添加到UDF以根据您传递的内容生成密钥。
希望这有帮助。
答案 1 :(得分:0)
您可以直接在SELECT语句中使用该函数
INSERT INTO OldTable (StrangelyDerivedKey,
FirstName,
LastName)
SELECT dbo.GetKey(),
FirstName,
LastName
FROM NewTable;
但是,使用此选项,您将使表newtable中的所有firstname和lastname记录与该函数返回的strangelyderivedkey具有相同的值。您可能希望在where子句中有一些条件。
由于这只是一个示例查询,因此您可以这样做。