簡體   English   中英

如何從表中選擇名稱存儲在另一表中帶有“ 0”前綴的列中

[英]How to select from table which name is stored in a column with “0,” prefix in another table

我需要能夠從一個表中選擇所有內容,該表的名稱存儲在某些表中帶有“ 0”前綴的列中。

我有一個表,其中有一個“參數”列,用於存儲一些不同的數據。 其中一些數據是帶有“ 0”前綴的臨時表名。 例如,表名稱為“ 0,awfhe”,而只有“ awfhe”。 (這些總是在左側僅2個字符)。 但是,並非“參數”列中的每個值都是表名。

我寫了這樣的查詢:

DECLARE @agrtid   INT = 0
WHILE(@AGRTID<10) 
BEGIN      
SET @agrtid = @agrtid+1;
DECLARE @sql NVARCHAR(MAX) = ''

IF EXISTS (Select agrtid from awftrans)


SELECT @sql = @sql +
'SELECT
*
FROM awftrans A
JOIN ' + QUOTENAME(wf_table_name) + ' B
ON A.wf_group = B.wf_group
where A.wf_group IS NOT NULL
UNION ALL
'
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid = @agrtid
) t

IF @sql <> '' BEGIN
-- Remove the last UNION ALL
SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

PRINT @sql

EXEC sp_executesql
    @sql,
    N'@agrtid INT',
    @agrtid
END
END

我想使用存儲在“ argumen” t列中的表而不是“ wf_table_name”,但是前綴“ 0”不允許我這樣做。 另一件事是,並非“參數”列中的每個值都是表名。

有沒有一種方法可以在此查詢中使用“參數”列而不是“ wf_table_name”?

//編輯:更精確地說,我想到的是這樣的:

  (...)
  FROM awftrans A
 JOIN ' + QUOTENAME(RIGHT(argument)-2) + ' B
     ON A.wf_group = B.wf_group
    where A.wf_group IS NOT NULL
    UNION ALL
 '
 FROM (
    SELECT DISTINCT (RIGHT(argument)-2) FROM awftrans WHERE agrtid = @agrtid
 ) t
  (...)

// EDIT2:

問題是,當我編寫這樣的查詢時:

 DECLARE @agrtid   INT = 0
 WHILE(@AGRTID<10) 
 BEGIN      
 SET @agrtid = @agrtid+1;
 DECLARE @sql NVARCHAR(MAX) = ''

 IF EXISTS (Select agrtid from awftrans)

 SELECT @sql = @sql +
 'SELECT
  *
 FROM awftrans A
 JOIN ' + QUOTENAME(argument) + ' B
  ON A.wf_group = B.wf_group
 where A.wf_group IS NOT NULL
 UNION ALL
'
FROM (
 SELECT DISTINCT argument FROM awftrans WHERE agrtid = @agrtid
 ) t

 IF @sql <> '' BEGIN
   -- Remove the last UNION ALL
    SELECT @sql = LEFT(@sql, LEN(@sql) - 11)

   PRINT @sql

    EXEC sp_executesql
       @sql,
       N'@agrtid INT',
       @agrtid
END
END

我收到這樣的消息:

     SELECT
       *
      FROM awftrans A
      JOIN [0,awfhe] B
        ON A.wf_group = B.wf_group
       where A.wf_group IS NOT NULL

  Msg 208, Level 16, State 1, Line 1
  Invalid object name '0,awfhe'.

而且我需要擺脫此sql語句中的前綴“ 0”。

您可以使用LIKE謂詞來將參數與表名進行匹配,因此agrtid = @agrtid使用agrtid LIKE '%' + @agrtid + '%'代替agrtid = @agrtid

...
FROM (
SELECT DISTINCT wf_table_name FROM awftrans WHERE agrtid LIKE '%' + @agrtid + '%'
) t
...

以上查詢僅正確。 但是,代替Quotename函數,使用填充函數“ stuff(wf_table_name,1,2,'')”刪除前兩個字符,這將為您提供表名,並且在if條件下,使用9而不是11作為聯合長度,則全部為僅9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM