[英]Create table with Dynamic SQL
因此,我已經為此工作了幾天,也許我已經考慮了太久了。
我要嘗試做的是創建一個過程,該過程將基於我的SELECT查詢創建另一個表,原因是主表長17行以上,並且希望此信息被三位數的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徹夜難眠
缺少什么?我可以用哪些方式獲得更干凈,更安全的代碼?
謝謝
目前尚不清楚您要的是什么,但是我要進行一個有根據的猜測,即您有一個名為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 + '%'
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.