【发布时间】:2022-08-20 04:02:30
【问题描述】:
应用:MS SSMS 版本:18.12.1 视窗 10
我有表名 1包含以下信息
| col1Name | col2Name | col3Name |
|---|---|---|
| -,99 | fred | 1,23 |
col1 - col2 - col3 都是字符串数据类型
col1 序数值 = 1
col2 序数值 = 2
col3 序数值 = 3
我使用下面的代码从 TABLE_NAME1 中检索与货币值相关的列名,并将这些列放入 TABLE_NAME2
DROP TABLE IF EXISTS STAGE.DBO.TABLE_NAME2<BR>
SELECT SC.NAME AS COLUMN_NAME<BR>
,SC.COLORDER AS COLUMN_ORDINAL<BR>
,CAST(ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS SMALLINT) AS ROW_NUM<BR>
INTO STAGE.DBO.TABLE_NAME2<BR>
FROM SYSOBJECTS AS SO<BR>
INNER JOIN SYSCOLUMNS AS SC ON SO.ID = SC.ID<BR>
WHERE SO.XTYPE = \'U\'<BR>
AND SO.NAME = \'TABLE_NAME2\'<BR>
AND SC.COLORDER IN (1,3)<BR>
ORDER BY SC.COLORDER, SC.NAME<BR>
TABLE_NAME2包含以下信息
| column_name | column_ordinal | row_num |
|---|---|---|
| col1Name | 1 | 1 |
| col2Name | 3 | 2 |
我想做的事:循环遍历 TABLE_NAME1 列名,如果与 TABLE_NAME2 中的值匹配,则返回该列名并将其分配给变量。在 UPDATE TABLE 语句中使用变量将逗号 (,) 替换为点 (.)
以下是我尝试过的:将结果分配给变量
DECLARE @TABLE_NAME1 NVARCHAR(MAX)
DECLARE @TABLE_NAME2 NVARCHAR(MAX)
DECLARE @SQLQRY1 NVARCHAR(MAX)
DECLARE @LOOP1 SMALLINT
DECLARE @TABLE_ROW_COUNT1 SMALLINT
DECLARE @XTYPE1 CHAR(1)
DECLARE @COL_NAME1 NVARCHAR(MAX)
SET @TABLE_NAME1 = \'CH_IBRO_HOUSEHOLD_ACTIVITY_STG\'
SET @TABLE_NAME2 = \'STAGE.DBO.CH_IBRO_HH_ACT_COL_NAME_STG\'
SET @LOOP1 = 1
SET @XTYPE1 = \'U\'
SET @TABLE_ROW_COUNT1 =2
WHILE @LOOP1 <= @TABLE_ROW_COUNT1
BEGIN
SET @SQLQRY1 = N\'SELECT @COL_NAME1=TBL2.COLUMN_NAME
FROM ( SELECT SC.[NAME] AS COL_NAME, SC.COLORDER AS COL_ORDER
FROM SYSOBJECTS AS SO
INNER JOIN SYSCOLUMNS AS SC ON SO.ID = SC.ID
WHERE SO.XTYPE = \'\'\'+ @XTYPE1 +\'\'\'
AND SO.NAME = \'\'\'+ @TABLE_NAME1 +\'\'\'
) AS TBL1
INNER JOIN ( SELECT *
FROM \'+ @TABLE_NAME2 +\'
) AS TBL2 ON TBL2.COLUMN_NAME = TBL1.COL_NAME
AND TBL2.COLUMN_ORDINAL = TBL1.COL_ORDER
WHERE TBL2.ROW_NUM = \' + CAST(@LOOP1 AS NVARCHAR(MAX))
EXECUTE @COL_NAME1 = sp_executesql @SQLQRY1 OUTPUT
PRINT \'COL_NAME = \'+ CAST(@COL_NAME1 AS VARCHAR);
PRINT \'LOOP NUMBER = \'+ CAST(@LOOP1 AS VARCHAR);
/* INCREMENT */
SET @LOOP1 = @LOOP1 + 1
END
感谢大家的支持,因为我是 T-SQL 新手
-
看看:sommarskog.se/dynamic_sql.html#sp_executesql,见第 2.1 节 sp_executesql。
标签: tsql