[英]SQL SELECT Dynamic column names
MS SQL中有什么方法可以創建這樣的動態選擇查詢嗎? :
DECLARE @cnt INT = 1
DECLARE @value NVARCHAR(25)
DECLARE @query AS NVARCHAR(MAX)
DECLARE @part NVARCHAR(25) = 'W11282173'
WHILE @cnt <= 10
BEGIN
Set @query = N'SELECT Check'+str(@cnt)+ N' from udtSmartPlastic where Partnumber ='+@part
exec sp_executesql @query;
SET @cnt = @cnt + 1
END
我有這樣的表:
這個想法是運行一個while循環,並一一從表(所有10個表)中獲取特定值,並將其設置為某個組件的值。
如果有另一種更簡單,更復雜的方法可以告訴我。
驗證碼:
DECLARE @cnt INT = 1
DECLARE @value NVARCHAR(25)
DECLARE @query AS NVARCHAR(MAX)
DECLARE @part NVARCHAR(25) = 'W11282173'
WHILE @cnt <= 10
BEGIN
set @query = N'SELECT Check'+str(@cnt)+ N' from udtSmartPlastic where Partnumber ='+@part
exec sp_executesql @query;
--SELECT Check+str(1) from udtSmartPlastic where PartNumber = 'W11282173'
INSERT INTO @TblReturn VALUES ('txtCheck'+str(@cnt), 'Property', '<property Value='+@value+'/>')
SET @cnt = @cnt + 1
END
我必須從Columns中獲取值並分配標簽Check1..2..3的值(基本上將其重命名)
這復制了您擁有的SQL,但是,我不太了解為什么要這樣做:
DECLARE @SQL nvarchar(MAX);
DECLARE @Part nvarchar(25) = 'W11282173'
WITH Tally AS (
SELECT I
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) V(I))
SELECT @SQL = STUFF((SELECT NCHAR(10) + N'SELECT ' + QUOTENAME(N'CHECK' + CONVERT(nvarchar(2),T.I)) + N' FROM udtSmartPlastic WHERE Partnumber = @dPart;'
FROM Tally T
FOR XML PATH(N'')),1,1,N'');
PRINT @SQL;
EXEC sys.sp_executesql @SQL, N'@dPart nvarchar(25)',@dPart = @Part;
請注意,我已將您的查詢從一個開放查詢更改為一個參數化查詢。 注射離您的朋友很遠,您應該盡一切努力使某人無法做到。
編輯:至於規范化您的數據; 您可以通過以下方法輕松實現:
SELECT SP.PartNumber,
CHOOSE(T.I,Check1,Check2,Check3,Check4,Check5,Check6,Check7,Check8,Check9,Check10) AS CheckValue
--INTO udtSmartPlasticn
FROM udtSmartPlastic SP
CROSS APPLY (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) T(I);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.