这是一个我似乎找不到答案的问题。
如果我使用带有动态SQL的存储过程,并且从动态SQL中的表中选择结果,则在运行该过程时,不会看到来自select的结果。但是,如果在动态SQL之外执行select,然后运行该过程,则会看到表的结果。
注意:在动态SQL中创建的表是一个本地临时表。当然什么时候
这有什么原因吗?
即
USE SERVER
GO
CREATE PROC AnalyticsDW.ComputeBestTreatment
(
@ClientCode varchar(7)='FR'
)
as
declare @sql varchar(1000)
set @sql=
动态SQL存储在SQL表中,必须在特定条件下执行。目前,我们使用游标为我们处理,但我总是被告知,避免游标时,如果可能,因为他们不是最有效的方式做事情。因此,我的问题是:如果没有它们,我如何执行动态SQL (如果有方法的话)?整个系统都是围绕这种动态SQL混乱构建的,因此不会改变它。
为此,只需假设表中有Id AS IDENTITY和SQL AS VARCHAR字段,其中SQL字段包含要执行的SQL (很明显)。
编辑:--基本上,我想循环遍历表,并在SQL列中执行SQL。
因此,表中的一行基本上如下所示:
ID SQL
-- ----------------------
1 SE
我已经创建了一个创建临时表的存储过程。现在,我需要能够使用.NET对其进行查询。因此,我需要如下内容:
SELECT * FROM storedProcedure() WHERE ...
存储过程创建的表也是动态的,因此模式将发生变化。使用SQL Server 2005。
我不能使用函数,因为需要返回的是一个动态表。必须事先定义表,这会使函数变得无用。
在动态SQL的帮助下,我最终创建了一个全局临时表。我能够创建一个动态全局临时表,并通过.NET访问它。
我可以在动态sql中动态地传递一个表名。但是我需要在动态sql中传递多个表,并且我需要包括表名,无论我传递的是什么,都需要包含相同的东西作为列名Ex:
empno empname deptname tablename
101 krishna Research emp,dept
或
101 krishna research emp-dept
为了传递一个表,我使用了下面的代码
ALTER PROCEDURE Dynamic_SP
@Table_Name sysname
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Dynam
我是一个动态SQL的初学者,并且试图编写一个需要包含表变量的动态sql代码,我尝试包含表变量.When,我得到了一个错误,告诉我需要包含静态变量。
下面只是代码的一部分
DECLARE @NAMES TABLE (name varchar)
DECLARE @fields varchar(max);
.
.
.
Select @fields=FROM sys.columns
WHERE object_id=object_id('dbo.employees')
order by name
SET @SQL=''
SET @SQL='Select '
我有一个SQL查询(一个存储过程),我想要转换成PLSQL,我已经转换了大部分存储过程,但我不能转换以下部分:
DECLARE lookupTableRow CURSOR FOR
SELECT TableName FROM SYS_LookUpTable
OPEN lookupTableRow
FETCH NEXT FROM lookupTableRow INTO @tableName
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql='SELECT * FROM '+@tableName
EXECUTE sp_execute
我们在Oracle服务器上有N个表,我们希望将所有这些表从Oracle加载到SQL服务器。我们正在创建相同的动态SSIS包,这将采取甲骨文ServerName,数据库名称,模式名称,表列表等,并将加载所有这些表到SQL server。我们已经为Oracle添加了Link Server on SQL Server (SSMS)。 但是我们没有得到有效的方法来做同样的事情。我们如何在单个SSIS包中实现这一点。我们如何处理Oracle表的元数据,并在SQL server上创建它?此SSIS包也应该在SQL server上动态创建表,为此,我们尝试在SSIS包中创建临时表。
Good day StackOverflow
我从动态sql创建的表可以有任意数量的列,因为它是一个数据透视表。
-- Pivot the table so we get the UW as columns rather than rows
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = '
SELECT *
FROM #PreProcessed
PIVOT (SUM(Quotes)
FOR [UW] IN (' + @UWColumns + ')
) AS bob'
我运行这段代码来运行我的动态sql
我管理的一个产品团队有大量使用动态sql查询的查询,这些查询使用连接注入表。虽然它有杀菌功能,但我正在尝试完全删除动态sql。
有没有一种方法可以参数化表名?我正在尝试思考如何查询一个表,如下所示:
SELECT * FROM (SELECT DISTINCT Table_Name FROM INFORMATION_SCHEMA.Tables WHERE Table_Name = :queryParam)
这个是可能的吗?
我需要在我的一个存储过程中创建一个临时表。要插入到临时表中的数据是从动态数据透视查询派生的-因此我与动态sql绑定在一起。所以它变成了这个样子-
set query = 'select ....'+ pivotcols +
' into ##temp_table
from base_table
pivot (
max(col1)
for col2 in
(' + pivotcols +'
我有一个存储的proc作为SQL命令文本,它将被传递一个包含表名的参数。然后,该过程从该表中返回数据。我不能直接调用该表作为OLE源,因为需要对proc中的结果集执行一些业务逻辑。在SQL2008中,这工作得很好。在升级的2012包中,我得到“元数据无法确定,因为...包含动态SQL。请考虑使用WITH RESULT SETS子句显式描述结果集。”
问题是我不能在proc中定义字段名,因为作为参数传递的表名可以是不同的值,并且每次得到的字段也可能不同。有没有人遇到过这个问题或者有什么想法?我尝试了使用"dm_exec_describe_first_result_set",临时表