我有一个存储过程ModifiedName
,是否可以列出表中所有行的名称并在其旁边显示“已修改的名称”?
一些事情:
SELECT name, EXEC ModifiedName name
FROM table
但哪个会起作用......
答案 0 :(得分:1)
首先,您必须编写函数而不是过程。你不能在select语句中调用一个过程,但函数可以。
在函数内部编写逻辑以修改名称并在选择查询中使用它。
例如,编写一个如下所示的函数。(这将附加'名字'先生'
CREATE FUNCTION dbo.ModifiedName ( @name VARCHAR(50))
RETURNS VARCHAR(150)
AS
BEGIN
DECLARE @ModifiedName VARCHAR(150)
SET @ModifiedName= 'Mr.'+@name
RETURN @ModifiedName
END
使用以下脚本在选择列表中获取原始名称和修改后的名称。
SELECT name, dbo.ModifiedName (name)
FROM table
答案 1 :(得分:0)
如果是parameterless sp
,您可以使用临时表。否则,您应该使用function
。
CREATE TABLE #tmp (Name INT)
INSERT INTO #tmp
EXEC ModifiedName
SELECT name, (SELECT TOP 1 Name FROM #tmp) name
FROM table
答案 2 :(得分:0)
你可以做到
CREATE TABLE SomeName(... appropriate definitions ...);
INSERT INTO SomeName
EXEC YourSP;
SELECT * FROM SomeName;
但是 - 说实话 - 我认为你正在尝试以另一种方式解决的事情......
你好,不知道你对你的评论意味着什么,但试试这个:
CREATE PROCEDURE dbo.tmpTest AS
BEGIN
SELECT TOP 3 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
END
GO
CREATE TABLE #tmpTable(ColName NVARCHAR(MAX));
INSERT INTO #tmpTable
EXEC dbo.tmpTest;
SELECT * FROM #tmpTable;
GO
DECLARE @tmpTbl TABLE(ColName NVARCHAR(MAX));
INSERT INTO @tmpTbl
EXEC dbo.tmpTest;
SELECT * FROM @tmpTbl;
GO
DROP TABLE #tmpTable;
DROP PROCEDURE dbo.tmpTest;
但是 - 一般情况下 - 如果您只想读取数据,则应该使用VIEW
或inline TVF
。程序设计做某事......