我正在尝试编写一个存储过程,将Excel文件读入临时表,然后按下该表中的一些数据,然后将该表中的选定行插入永久表.
所以,它是这样开始的:
SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="+@file+";HDR=YES', 'SELECT * FROM [Sheet1$]')"
EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)
这似乎有用.
但是,如果我尝试这样的事情:
Select * from #mytemptable
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无效的对象名称'#mytemptable'
为什么#mytemptable不被认可?有没有办法让#mytemptable可以访问存储过程的其余部分?
提前谢谢了!
我将以下T-SQL代码配置为使用SQL Server代理作业每天运行.我的数据库在SQL Server 2012上运行.
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\;HDR=YES;FMT=Delimited','SELECT * FROM [myfile.csv]')
SELECT ReservationStayID,NameTitle,FirstName,LastName,ArrivalDate,DepartureDate FROM [GuestNameInfo]
Run Code Online (Sandbox Code Playgroud)
我的问题是此查询的输出将附加到csv
文件中的现有记录.我希望每次运行SQL Server代理作业时输出都覆盖现有内容.
如何修改我的查询以实现此目的?
我正在使用OPENROWSET(BULK ...)将文件内容插入到我的表中.问题是我还需要在同一个INSERT语句中指定另一列的值.
我有这样的事情:
INSERT INTO MyTable
SELECT *
FROM OPENROWSET(BULK 'c:\foo.bin', SINGLE_BLOB)
Run Code Online (Sandbox Code Playgroud)
我确定有一种方法可以在这里指定不同列的值,但我不知道如何.
我在运行 Windows 7 x-64 的独立非联网开发 PC 上安装了 SQL Server 2012 完整版。假设 FOO 是我的 PC 的名称,而我的 SQL Server 命名实例是 FOO\SQL2012。
我正在尝试按照此处的示例进行操作,这些示例展示了如何使用存储过程作为数据源创建新的临时表。
我想执行这些查询中的任何一个,但我收到了显示的错误。
SELECT * into #temp FROM OPENQUERY("FOO\SQL2012", 'exec MySchema.MyStoredProc')
**ERROR: Server 'FOO\SQL2012' is not configured for DATA ACCESS.**
Run Code Online (Sandbox Code Playgroud)
或此查询:
SELECT * INTO #temp FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2012;Trusted_Connection=yes;',
' EXEC MySchema.MyStoredProc')
**ERROR: Msg 11529, Level 16, State 1, Procedure sp_describe_first_result_set, Line 1
Run Code Online (Sandbox Code Playgroud)
无法确定元数据,因为每个代码路径都会导致错误;请参阅其中一些以前的错误。**
我将如何配置 SQL Server 实例以允许当前经过身份验证的用户(无论它可能是谁)对本地实例使用 OPENROWSET、OPENQUERY?
通过 Windows 进行身份验证的用户和通过 SQL Server 进行身份验证的用户是否需要这些查询的单独版本?
windows-authentication sql-authentication openquery openrowset sql-server-2012
我正在创建一个存储过程,在其中调用另一个存储过程(该过程返回了很多列,并且我只需要一个列值,所以我无法创建临时表来存储值)
OPENROWSET
。当我用下面的话就可以了
declare @AgencyID int=15,@PatientID int=3701
SELECT a.PrimaryInsuredName
FROM OPENROWSET('SQLNCLI',
'Server=ServerName;Database=DbName;Trusted_Connection=yes',
'exec USP_Billing_GetPatientWithInsurence 3701,15') AS a;
Run Code Online (Sandbox Code Playgroud)
一切正常。但是我想传递参数进行调用,
USP_Billing_GetPatientWithInsurence
因为值将是动态的。所以我用下面的代码
declare @AgencyID int=15,@PatientID int=3701
SELECT a.PrimaryInsuredName
FROM OPENROWSET('SQLNCLI',
'Server=ServerName;Database=DbName;Trusted_Connection=yes',
'exec USP_Billing_GetPatientWithInsurence '+ @PatientID +','+ @AgencyID+'') AS a;
Run Code Online (Sandbox Code Playgroud)
但它不起作用当我运行此查询时发生错误,
Incorrect syntax near '+'.
我不知道为什么会这样。请为此提供解决方案。我也为此搜索了一下,但找不到合适的解决方案。
谢谢