【发布时间】:2018-06-09 08:06:05
【问题描述】:
我正在尝试做的事情:我创建了一个 T-SQL 存储过程,它从多个表中返回单个列。
CREATE PROCEDURE [dbo].[Search_]
(@am VARCHAR(12))
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DBName VARCHAR(128)
DECLARE Tbl CURSOR READ_ONLY FOR
SELECT LEFT(TABLE_NAME, 27) AS Tbl
FROM ap.INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE LEFT('STORED_PRODUCTS_FR_[0-9]_%', 27)
AND SUBSTRING(TABLE_NAME, 20, 2) LIKE '%[0-9]%'
AND SUBSTRING(TABLE_NAME, 23, 1) = '_'
ORDER BY
CONVERT(INT, SUBSTRING(TABLE_NAME, 24, 4)) ASC,
CONVERT(INT, SUBSTRING(TABLE_NAME, 21, 2)) ASC
OPEN Tbl
FETCH NEXT FROM Tbl INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SQL VARCHAR(100)
SET @sql = 'SELECT [column 3] FROM ' + @DBName + ' WHERE [COLUMN 4] = ' + @am + '';
EXEC(@sql)
FETCH NEXT FROM Tbl INTO @DBName
END
END
CLOSE Tbl
DEALLOCATE Tbl
然后在asp.net中,我想填充一个gridview...
try
{
SqlDataAdapter dt = new SqlDataAdapter();
string message = string.Empty;
con.Open();
cmd.CommandText = "Search_";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@am", am.Text);
cmd.Connection = con;
dt.SelectCommand = cmd;
DataTable dTable = new DataTable();
dt.Fill(dTable);
GridView1.DataSource = dTable;
GridView1.DataBind();
}
catch (Exception ex)
{
throw ex;
}
只返回存储过程的单行(第一行)。
我做错了什么?似乎这些值正在覆盖自己。
任何人的帮助......
【问题讨论】:
-
您的 SP 在 SQL Server 中是否如您所愿?
-
是的。它按预期返回 2 行。
-
在 SQL 管理工作室中运行你的存储过程,看看那里的数据是如何返回的。您可能有两张单行表,而不是一张两行表
-
此代码将为每个结果返回一个 DataTable,并最终仅将第一个表与它的唯一结果绑定到您的 DataGrid 中
-
我发布的不是 2 行,而是 3 行。我没有注意到最后一行。前 2 行有值。最后一个被命名为“返回值”,值为 0。
标签: c# sql-server tsql stored-procedures