我有一個存儲過程,由數據收集系統調用。使用動態SQL訪問存儲過程參數
該過程有許多參數用於收集數據。
我使用INFORMATION_SCHEMA參數列表拉到一個臨時表
SELECT substring(PARAMETER_NAME , 2 , len(PARAMETER_NAME) - 1) 'SpParam', PARAMETER_NAME, DATA_TYPE INTO #tempParam FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME='InsertB2ChamberData'
從那裏我可以插入我的標籤列表表
INSERT INTO ToolTag SELECT @ToolID, @ToolTagTypeID, SpParam, 'Default Description', GETDATE() FROM #tempParam WHERE spParam NOT IN (SELECT ToolTagName FROM ToolTag WHERE ToolID = @ToolID)
任何丟失的數據的標籤名稱到目前爲止這麼好,現在我想使用ToolTag和臨時表列表來插入每個參數的數據。最初我通過一些動態SQL可以做到這一點。
DECLARE tag CURSOR FOR SELECT t.ToolTagID, p.PARAMETER_NAME, p.DATA_TYPE FROM ToolTag t JOIN #tempParam p ON t.ToolTagName = p.SpParam OPEN tag FETCH NEXT FROM tag INTO @TagID, @Parameter, @DataType WHILE @@FETCH_STATUS = 0 BEGIN SELECT @Cindex = CHARINDEX('char', @DataType) IF @Cindex 0 begin SELECT @sql = N'INSERT INTO ToolTagData VALUES('+convert(varchar(10),@TagID)+', '+convert(varchar(10),@ToolDataEventID)+', '+ @Parameter +', 0)' end else begin SELECT @sql = N'INSERT INTO ToolTagData VALUES('+convert(varchar(10),@TagID)+', '+convert(varchar(10),@ToolDataEventID)+', CONVERT(varchar(255),'[email protected] +'), '+convert(varchar(50),@Parameter)+')' end EXEC(@sql) FETCH NEXT FROM tag INTO @TagID, @Parameter, @DataType END CLOSE tag DEALLOCATE tag
當然以上不作爲@sql聲明的工作結束了這樣的事情:
INSERT INTO ToolTagData VALUES(315,50,@ShutterPosition,0)
由於與@ShutterPosition參數值相反。我被困在這裏,我可以對每個名字進行某種強制性的操作,但是我希望能夠抽象並且對其他程序具有可重用性。
那麼有沒有什麼出路,或者我用這種方法吠叫錯誤的樹?
編輯: 我的模式是這樣的:
的目標是插入一條記錄到ToolTagData數據爲每個存儲過程的參數。 ToolTag的關鍵是存儲過程參數的名稱。
希望通過向過程添加新參數將標籤添加到ToolTag表中。
我受限於第三方數據採集程序能做什麼,所以這次嘗試抽象了這個過程。
你在吠叫錯誤的樹。給我們一些關於你的功能意圖的信息,你會得到一些更好的建議。 – Tahbaza 2010-10-22 23:11:44
這裏有一些更多的細節 – dverespey 2010-10-22 23:30:16