Tsql “动态”;在“;用户定义类型的查询
我得到了一个SQL表,每一行都由某种Virtuel Tabel的单个值组成,这意味着实际存在的SQL表如下所示:Tsql “动态”;在“;用户定义类型的查询,tsql,sql-server-2012,user-defined-types,dynamicquery,sp-executesql,Tsql,Sql Server 2012,User Defined Types,Dynamicquery,Sp Executesql,我得到了一个SQL表,每一行都由某种Virtuel Tabel的单个值组成,这意味着实际存在的SQL表如下所示: ----------------------------------------- |DataRecordset | DataField | DataValue | ----------------------------------------- | 1 | Firstname | John | | 1 | Lastname
-----------------------------------------
|DataRecordset | DataField | DataValue |
-----------------------------------------
| 1 | Firstname | John |
| 1 | Lastname | Smith |
| 1 | Birthday | 18.12.1963 |
| 2 | Firstname | Jane |
| 2 | Lastname | Smith |
| 2 | Birthday | 14.06.1975 |
-----------------------------------------
-------------------------------------
| Firstname | Lastname | Birthday |
-------------------------------------
| John | Smith | 18.12.1963 |
| Jane | Smith | 14.06.1975 |
-------------------------------------
INSERT INTO @secondTable (DataRecordset, @DataField ) VALUES (@DataRecordset, @DataValue)
我需要有这样的感觉:
-----------------------------------------
|DataRecordset | DataField | DataValue |
-----------------------------------------
| 1 | Firstname | John |
| 1 | Lastname | Smith |
| 1 | Birthday | 18.12.1963 |
| 2 | Firstname | Jane |
| 2 | Lastname | Smith |
| 2 | Birthday | 14.06.1975 |
-----------------------------------------
-------------------------------------
| Firstname | Lastname | Birthday |
-------------------------------------
| John | Smith | 18.12.1963 |
| Jane | Smith | 14.06.1975 |
-------------------------------------
INSERT INTO @secondTable (DataRecordset, @DataField ) VALUES (@DataRecordset, @DataValue)
真实的现有SQL表像第一个一样存储的原因是,核心数据周围有更多的信息。。。比如谁写的数据。。。数据是什么时候写的。。。从哪一天到哪一天,数据是重要的。。。所以有很多不同的变量,它们决定了我使用第一个表中的哪一行来生成第二个表
我在SQL Server上创建了一个用户定义的表类型,它看起来像第二个表
然后我开始写一个程序
DECLARE @secondTable secondTable_Typ
DECLARE firstTable_Cursor CURSOR FOR SELECT DataRecordset, ... WHERE...lot of Text
OPEN firstTable_Cursor
FETCH NEXT FROM firstTable_Cursor
INTO @DataRecordset, @...
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT * FROM @secondTable WHERE DataRecordset= @DataRecordset)
BEGIN
我的问题是。。。现在我需要某种动态查询,因为我想做如下操作:
-----------------------------------------
|DataRecordset | DataField | DataValue |
-----------------------------------------
| 1 | Firstname | John |
| 1 | Lastname | Smith |
| 1 | Birthday | 18.12.1963 |
| 2 | Firstname | Jane |
| 2 | Lastname | Smith |
| 2 | Birthday | 14.06.1975 |
-----------------------------------------
-------------------------------------
| Firstname | Lastname | Birthday |
-------------------------------------
| John | Smith | 18.12.1963 |
| Jane | Smith | 14.06.1975 |
-------------------------------------
INSERT INTO @secondTable (DataRecordset, @DataField ) VALUES (@DataRecordset, @DataValue)
但是我不能像这样使用变量@DataField。。。所以我用google找到了函数sp_executesql。。。我编写了以下代码:
SET @sqlString = 'INSERT INTO @xsecondTable (DataRecordset, ' + @DataField + ') VALUES (@xDataRecordset, @xDataValue)'
EXEC sp_executesql @sqlString, N'@xsecondTable secondTable_Typ, @xDataRecordset smallint, @xDataValue sql_variant', @secondTable , @DataRecordset, @DataValue
但是当我运行这个过程时,我得到了一个错误,这意味着我必须将一个参数“READONLY”添加到“@xsecondTable”
我认为问题在于,sp_executesql可以使用变量作为输入或输出。。。但我不是舒尔,如果有可能将此用户定义的表格类型引入此过程
DECLARE @secondTable secondTable_Typ
DECLARE firstTable_Cursor CURSOR FOR SELECT DataRecordset, ... WHERE...lot of Text
OPEN firstTable_Cursor
FETCH NEXT FROM firstTable_Cursor
INTO @DataRecordset, @...
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT * FROM @secondTable WHERE DataRecordset= @DataRecordset)
BEGIN
有人知道如何运行这个代码吗
非常感谢您是否考虑过对数据进行透视?大致如下:
SELECT
[Firstname]
, [Lastname]
, [Birthday]
FROM
(
SELECT
[DataRecordset]
, [DataField]
, [DataValue]
FROM [Table]
) DATA
PIVOT
(
MIN ([DataValue]) FOR [DataField] IN
(
[Firstname]
, [Lastname]
, [Birthday]
)
) PVT
您是否考虑过对数据进行透视?大致如下:
SELECT
[Firstname]
, [Lastname]
, [Birthday]
FROM
(
SELECT
[DataRecordset]
, [DataField]
, [DataValue]
FROM [Table]
) DATA
PIVOT
(
MIN ([DataValue]) FOR [DataField] IN
(
[Firstname]
, [Lastname]
, [Birthday]
)
) PVT
我知道一些例子,其中用户定义的表类型用于此函数。。。但它们被标记为只读,只需进行一些选择…您使用的是什么sql server版本?我使用的是sql server 2012版我知道一些示例,其中用户定义的表类型用于此函数。。。但它们被标记为只读,只需做一些选择…您使用的是什么sql server版本?我使用的是sql server 2012版本,很高兴能提供帮助。:)您好,还有一个小问题:是否有机会在最后一个表中添加“DataRecordset”列非常感谢。很高兴能为您效劳。:)您好,还有一个小问题:是否有机会在最后一个表中添加“DataRecordset”列非常感谢你。