Sql server 在不指定列的情况下创建表,或使用临时变量进行联接

Sql server 在不指定列的情况下创建表,或使用临时变量进行联接,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有这个存储过程,我想找到一种方法,这样在执行Crates\u GetForUser ALTER procedure [dbo].[GetSomething] ( @UserID VARCHAR(200), @URLFilter varchar(256) ) AS --Temp table definition must match the output from the Crates_GetForUser stored procedure CREATE TABLE #Crat

我有这个存储过程,我想找到一种方法,这样在执行
Crates\u GetForUser

ALTER procedure [dbo].[GetSomething]
(
    @UserID VARCHAR(200),
    @URLFilter varchar(256)
)
AS

--Temp table definition must match the output from the Crates_GetForUser stored procedure
CREATE TABLE #CratesTemp
(
   ID int, 
   Title nvarchar(255), 
   URL nvarchar(255), 
   CrateID int, 
   AESKey varchar(100),
   UserIsBuyer int, 
   ClientID int, 
   PromotionName nvarchar(255), 
   DisablePrinting bit, 
   DisableEmailing bit
)

INSERT #CratesTemp (ID, Title, URL, CrateID,AESKey, UserIsBuyer, ClientID, PromotionName, DisablePrinting, DisableEmailing)
    EXEC Crates_GetForUser @UserID, @URLFilter

SELECT #CratesTemp.ClientID, #CratesTemp.CrateID, #CratesTemp.ID AS AutoID, Fruits.* FROM Fruits 
JOIN #CratesTemp ON Fruits.ListUrl LIKE #CratesTemp.URL + '%' OR Fruits.SiteUrl LIKE #CratesTemp.URL + '%'
当您可以轻松地使用C#代码调用现有存储过程,然后创建一个新的存储过程来获取公共内容时,使用此方法也是最佳实践

对我来说,上面看起来像是SQL代码的味道(不是我开发的…)

编辑


也许我可以使用SELECTINTO,但我根本不想提供SQL server或数据库名称。谢谢,当我遇到语法错误时,我可以这样做吗?

你能给我们看一下被调用的SP(Crates\u GetForUser)的代码吗?通常,仅仅为了获取数据而使用SP是一个非常糟糕的主意。这样做的大多数SP都可以轻松地转换为UDF(最佳选择“单一语句”)或视图。如果您必须按原样使用SP,您可以考虑一个自己的类型(look CREATE type)@Shnugo Crates\u GetForUser是一个大型SP,它本身就是我正在处理的,但我的更改破坏了这个SP,我只想让它工作,而不管Crates\u GetForUser SP返回的列是什么,我也向开发它的开发人员建议创建自己的类型,但你知道,这是一个永无止境的争论。。。无论如何,现在我只想专注于解决当前的问题:)如果SP内部需要这些字段,那么您就不走运了:您需要创建它们。我也同意@Shnugo,但我理解最佳解决方案并不总是可行的。尽管如此,它肯定更像是一种黑客行为。在更改输出时,最好跟踪存储过程的使用位置(
sys.sql\u expression\u dependencies
),并根据所做的更改配置依赖项。@GarethD我不是专家,但我不能在变量中获得SP的结果,然后使用select语句将其放入具有必需列的表中,这样我就可以忽略select语句中不需要的列,但我不确定语法=>是否继续