Excel如何使用Transact SQL从SQL Server导入数据

我想要使​​用TSQL将SQL服务器数据导入Excel。 在Excel中,我可以完美地使用SQL代码来检索表格。 但是,当我写TSQL代码而不是SQL它给了我“没有任何回顾”。

Excel是否支持TSQL代码? 如果是这样,我怎么能从SQL服务器导入数据到Excel?

我有这个示例代码顺便说一句。

use GOPLUS; DECLARE @kayitNo INT; DECLARE @CardRefOfItem INT; DECLARE @CardRefOfPrice INT; DECLARE @urunKodu VARCHAR(100); DECLARE @urunAdi VARCHAR(100); DECLARE @fiyat1 INT; DECLARE @fiyat2 INT; DECLARE @fiyat3 INT; DECLARE @numb INT; DECLARE @kayitSayisi INT = (SELECT COUNT(*) FROM LG_001_ITEMS); DECLARE @sayac INT = 0; CREATE TABLE #UrunListesis( Sira INT NOT NULL PRIMARY KEY, Ürün_Kodu VARCHAR(100), Ürün_Adı VARCHAR(100), Fiyat1 INT, Fiyat2 INT, Fiyat3 INT ) set @kayitNo = (SELECT TOP 1 LOGICALREF FROM LG_001_ITEMS ORDER BY LOGICALREF ASC) WHILE @sayac < @kayitSayisi BEGIN set @urunKodu = (SELECT LG_001_ITEMS.CODE FROM LG_001_ITEMS WHERE LG_001_ITEMS.LOGICALREF = @kayitNo) set @urunAdi = (SELECT LG_001_ITEMS.NAME FROM LG_001_ITEMS WHERE LG_001_ITEMS.LOGICALREF = @kayitNo) set @CardRefOfPrice = (SELECT TOP 1 LOGICALREF FROM LG_001_PRCLIST WHERE CARDREF = @kayitNo) set @numb = (SELECT COUNT(*) FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.CARDREF = @kayitNo) if (@numb >=1) begin set @fiyat1 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice) end if (@numb >=2) begin set @fiyat2 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice+1) end if (@numb =3) begin set @fiyat3 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice+2) end INSERT INTO #UrunListesis VALUES(@kayitNo,@urunKodu,@urunAdi,ISNULL(@fiyat1,0),ISNULL(@fiyat2,0),ISNULL(@fiyat3,0)); set @kayitNo = @kayitNo+1; set @sayac = @sayac + 1 set @fiyat1 = 0 set @fiyat2 = 0 set @fiyat3 = 0 END SELECT * FROM #UrunListesis 

很可能我只是想将临时表UrunListesis返回到Excel,就是这样。

一个替代的方法

您可以使用xp_cmdshell将sql导入到xls文件中,从而以这种格式插入表结构和数据:

 <?xml version="1.0" standalone="yes"?> <Columns> <ColumnData Column1="asd" Column2="dsa" Column3="ads" /> <ColumnData Column1="asd1" Column2="dsa2" Column3="ads3" /> </Columns> 

使用类似的东西

 exec xp_cmdshell 'echo ^<?xml version="1.0" standalone="yes"?^> >>C:\file.xls' 

您可以使用tableName参数创build一个过程,该参数将以最高格式格式化表和数据,并返回一个输出variables。

在Excel(2010)中,我使用以下步骤以表格或数据透视格式返回数据:

  • 打开Excel单击数据选项卡select“从其他来源”select“从SQL Server”

input服务器信息

在导入数据屏幕上

  • select属性转到定义选项卡设置命令types为SQL将SQL查询input到命令文本中

select所需的数据输出并单击确定。

我解决了我的问题。 如果你想在Excel中使用TSQL。 你应该声明一个存储过程。 喜欢这个;

 USE GOPLUS GO CREATE PROCEDURE deneme AS DECLARE @Urunlistesi TABLE( Sira int, Ürün_Kodu VARCHAR(100), Ürün_Adı VARCHAR(100), Fiyat1 int, Fiyat2 int, Fiyat3 int ) BEGIN SET NOCOUNT ON DECLARE @kayitNo INT; DECLARE @CardRefOfItem INT; DECLARE @CardRefOfPrice INT; DECLARE @urunKodu VARCHAR(100); DECLARE @urunAdi VARCHAR(100); DECLARE @fiyat1 INT; DECLARE @fiyat2 INT; DECLARE @fiyat3 INT; DECLARE @numb INT; DECLARE @kayitSayisi INT = (SELECT COUNT(*) FROM LG_001_ITEMS); DECLARE @sayac INT = 0; set @kayitNo = (SELECT TOP 1 LOGICALREF FROM LG_001_ITEMS ORDER BY LOGICALREF ASC) WHILE @sayac < @kayitSayisi BEGIN set @urunKodu = (SELECT LG_001_ITEMS.CODE FROM LG_001_ITEMS WHERE LG_001_ITEMS.LOGICALREF = @kayitNo) set @urunAdi = (SELECT LG_001_ITEMS.NAME FROM LG_001_ITEMS WHERE LG_001_ITEMS.LOGICALREF = @kayitNo) set @CardRefOfPrice = (SELECT TOP 1 LOGICALREF FROM LG_001_PRCLIST WHERE CARDREF = @kayitNo) set @numb = (SELECT COUNT(*) FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.CARDREF = @kayitNo) if (@numb >=1) begin set @fiyat1 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice) end if (@numb >=2) begin set @fiyat2 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice+1) end if (@numb =3) begin set @fiyat3 = (SELECT LG_001_PRCLIST.PRICE FROM LG_001_PRCLIST WHERE LG_001_PRCLIST.LOGICALREF = @CardRefOfPrice+2) end INSERT INTO @Urunlistesi VALUES(@kayitNo,@urunKodu,@urunAdi,ISNULL(@fiyat1,0),ISNULL(@fiyat2,0),ISNULL(@fiyat3,0)); set @kayitNo = @kayitNo+1; set @sayac = @sayac + 1 set @fiyat1 = 0 set @fiyat2 = 0 set @fiyat3 = 0 END SELECT * FROM @Urunlistesi SET NOCOUNT OFF END GO 

之后使用这个代码为Excel;

 DECLARE @return_value int EXEC @return_value = [dbo].[deneme] SELECT 'Return Value' = @return_value 

如果您使用SQL Server连接而不是使用Microsoft Query,则可以从Excel运行T-SQL。 select“ 数据”>“从其他源”>“从SQL Server”

input您的服务器名称并select您的数据库。 Excel将为您提供一个表格列表。 这是令人困惑的,因为它看起来像你不能使用SQL或T-SQL,但你可以 。 继续select一个表。 在下一页上设置你想要的设置,然后点击完成。

导入数据对话框出现后,单击属性 ,然后select定义选项卡。 在命令types下 :将select更改为SQL。 然后,您可以在命令文本框中input您喜欢的任何SQL或T-SQL。 您现在可以使用T-SQL,因为连接string是SQL OLEDB,而不是更通用的东西。

一旦完成input命令文本,Excel会给你一个错误,告诉你连接将不再像你最初设置的一样。 只需点击是从那里继续。