所以我已经在这几天工作了,也许我已经看了太久了。
我要做的是创建一个程序,根据我的SELECT查询创建另一个表,原因是主表超过17行,并且功率需要将此信息打破三位数ID。这个ID号是顺序的,但我确实有一张表,列出了所有这些ID。
我的问题有三个(至少我希望如此)部分。
创建动态SQL字符串以生成表格并提取正确的信息(DONE)
DECLARE @SQL NVARCHAR(MAX),
@Class NVARCHAR(3)
SET @Class ='103'
SET @SQL = 'SELECT ID.PartIntchNbr, ID.MfrCd, ID.OemId, ID.Application, ID.Interchange ,ID.HollanderPrice INTO Hldr.Hollander'+@Class+
' FROM [2014_EBook].dbo.HollanderInformation AS ID
WHERE SUBSTRING(ID.Interchange, 1, 3) = '+@Class;
EXEC (@SQL)
但是我觉得可能会有更安全/更清洁的方法。
当我尝试从此创建一个过程时遇到问题所以我可以为@Class传入一个变量。
CREATE PROCEDURE Hldr.HldrBreakDown
@Class NVARCHAR(3)
AS
DECLARE
@SQL NVARCHAR(MAX)
SET @SQL =
'SELECT ID.PartIntchNbr, ID.MfrCd, ID.OemId, ID.Application, ID.Interchange ,ID.HollanderPrice INTO Hldr.Hollander'+@Class+
' FROM [2014_EBook].dbo.HollanderInformation AS ID
WHERE SUBSTRING(ID.Interchange, 1, 3) = '+@Class
GO
我没有收到错误,一切运行正常,但是当我调用程序并输入变量时没有制作表格 - 我会承认我正在努力学习,其中大部分都是通过试验和错误的在线资源
第三 - 一旦完成这一切,计划是使用表值参数输入我的变量并让SQL彻夜翻转
缺少什么,我有什么方法可以获得更清晰,更安全的代码?
谢谢
答案 0 :(得分:0)
目前还不清楚你要求的是什么,但我会采取一种有根据的猜测,你有一个名为HollanderInformation
的表,其中包含数百万行,而其他人则希望根据第一行查询该表Interchange
列的3位数字。还有一个猜测:查询这些数据需要很长时间。
正如评论中所提到的那样,权力可能会告诉你他们遇到的问题,并由你来解决或指示解决方案。如果上述解决方案是他们所要求的,那么请阅读此解决方案并将其转回给他们。如果没有,那么阅读并执行它。
SELECT
ID.PartIntchNbr,
ID.MfrCd,
ID.OemId,
ID.Application,
ID.Interchange,
ID.HollanderPrice
FROM [2014_EBook].dbo.HollanderInformation AS ID
WHERE ID.Interchange LIKE @Class + '%'
然后在Interchange
上添加一个索引,看看是否加快了它的速度。
create nonclustered index on ix_HollanderInformation_Interchange [2014_EBook].dbo.HollanderInformation (Interchange);
如果这对您有用,那么您可以轻松地创建一个带有@Class
参数的表值函数。这来自SQL Server technet文档,并根据您的需要进行了调整。
IF OBJECT_ID(N'dbo.HldrBreakDown', N'IF') IS NOT NULL
DROP FUNCTION dbo.HldrBreakDown;
GO
CREATE FUNCTION dbo.HldrBreakDown(@Class nvarchar(50)) -- whatever type is appropriate here
RETURNS table
AS
RETURN (
SELECT
ID.PartIntchNbr,
ID.MfrCd,
ID.OemId,
ID.Application,
ID.Interchange,
ID.HollanderPrice
FROM dbo.HollanderInformation AS ID
WHERE ID.Interchange LIKE @Class + '%'
);